http://www.secdev.org/projects/scapy/doc/build_dissect.html#adding-new-protocols
IP / UDP / CUSTOM_DL_HDR / CUSTOM_HDR 과 같은 네트워크 스택이 있다고 가정한다. CUSTOM_DL_HDR의 Destination UDP Port는 50481이며, 바로 뒤에 CUSTOM_HDR이 따라 오도록 한다.
CUSTOM_DL_HDR는 [4 bytes] [2 bytes] [2 bytes] [2 bytes]로 구성되어 있다.
CUSTOM_HDR는 [1 byte] [1 byte] [2 bytes]로 구성되어 있다.
CUSTOM_DL_HDR과 CUSTOM_HDR Protocol 을 등록하기 위한 코드는 아래와 같다.
CUSTOM_Packet을 임포트하기 전의 pcap의 내용
CUSTOM_Packet을 임포트한 후의 pcap의 내용 : 851번 패킷의 경우, CUSTOM_Packet을 임포트한 이후에는 해당 프로토콜이 해석되어 전시되는 것을 볼수가 있다.
851번 패킷의 내용을 자세히 분석한 결과이다.
IP / UDP / CUSTOM_DL_HDR / CUSTOM_HDR 과 같은 네트워크 스택이 있다고 가정한다. CUSTOM_DL_HDR의 Destination UDP Port는 50481이며, 바로 뒤에 CUSTOM_HDR이 따라 오도록 한다.
CUSTOM_DL_HDR는 [4 bytes] [2 bytes] [2 bytes] [2 bytes]로 구성되어 있다.
CUSTOM_HDR는 [1 byte] [1 byte] [2 bytes]로 구성되어 있다.
CUSTOM_DL_HDR과 CUSTOM_HDR Protocol 을 등록하기 위한 코드는 아래와 같다.
from scapy.all import *
class CUSTOM_HDR(Packet):
name = "Custom Header"
fields_desc = [ XByteField("Custom1", 0),
XByteField("Custom2", 0),
ShortField("Custom3", 0) ]
class CUSTOM_DL_HDR(Packet):
name = "Custom Datalink Header"
fields_desc = [ XIntField("CustomDl1", 0),
ShortField("CustomDl2", 0),
ShortField("CustomDl3", 0),
ShortField("CustomDl4", 0) ]
def guess_payload_class(self, payload):
return CUSTOM_HDR
bind_layers(UDP, CUSTOM_DL_HDR, dport=50481)
class CUSTOM_HDR(Packet):
name = "Custom Header"
fields_desc = [ XByteField("Custom1", 0),
XByteField("Custom2", 0),
ShortField("Custom3", 0) ]
class CUSTOM_DL_HDR(Packet):
name = "Custom Datalink Header"
fields_desc = [ XIntField("CustomDl1", 0),
ShortField("CustomDl2", 0),
ShortField("CustomDl3", 0),
ShortField("CustomDl4", 0) ]
def guess_payload_class(self, payload):
return CUSTOM_HDR
bind_layers(UDP, CUSTOM_DL_HDR, dport=50481)
CUSTOM_Packet을 임포트하기 전의 pcap의 내용
CUSTOM_Packet을 임포트한 후의 pcap의 내용 : 851번 패킷의 경우, CUSTOM_Packet을 임포트한 이후에는 해당 프로토콜이 해석되어 전시되는 것을 볼수가 있다.
851번 패킷의 내용을 자세히 분석한 결과이다.