본문 바로가기

Language/python

scapy :: Custom Protocol 추가

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 을  등록하기 위한 코드는 아래와 같다.

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)



CUSTOM_Packet을 임포트하기 전의 pcap의 내용




CUSTOM_Packet을 임포트한 후의 pcap의 내용 : 851번 패킷의 경우, CUSTOM_Packet을 임포트한 이후에는 해당 프로토콜이 해석되어 전시되는 것을 볼수가 있다.



851번 패킷의 내용을 자세히 분석한 결과이다.