diff options
Diffstat (limited to 'external/construct/protocols/layer4')
-rw-r--r-- | external/construct/protocols/layer4/__init__.py | 4 | ||||
-rw-r--r-- | external/construct/protocols/layer4/isup.py | 15 | ||||
-rw-r--r-- | external/construct/protocols/layer4/tcp.py | 61 | ||||
-rw-r--r-- | external/construct/protocols/layer4/udp.py | 26 |
4 files changed, 106 insertions, 0 deletions
diff --git a/external/construct/protocols/layer4/__init__.py b/external/construct/protocols/layer4/__init__.py new file mode 100644 index 0000000..38693c6 --- /dev/null +++ b/external/construct/protocols/layer4/__init__.py @@ -0,0 +1,4 @@ +""" +layer 4 (transporation) protocols +""" + diff --git a/external/construct/protocols/layer4/isup.py b/external/construct/protocols/layer4/isup.py new file mode 100644 index 0000000..8111b60 --- /dev/null +++ b/external/construct/protocols/layer4/isup.py @@ -0,0 +1,15 @@ +""" +ISDN User Part (SS7 protocol stack) +""" +from construct import * + + +isup_header = Struct("isup_header", + Bytes("routing_label", 5), + UBInt16("cic"), + UBInt8("message_type"), + # mandatory fixed parameters + # mandatory variable parameters + # optional parameters +) + diff --git a/external/construct/protocols/layer4/tcp.py b/external/construct/protocols/layer4/tcp.py new file mode 100644 index 0000000..44f1bd7 --- /dev/null +++ b/external/construct/protocols/layer4/tcp.py @@ -0,0 +1,61 @@ +""" +Transmission Control Protocol (TCP/IP protocol stack) +""" +from construct import * +from binascii import unhexlify +import six + + +tcp_header = Struct("tcp_header", + UBInt16("source"), + UBInt16("destination"), + UBInt32("seq"), + UBInt32("ack"), + EmbeddedBitStruct( + ExprAdapter(Nibble("header_length"), + encoder = lambda obj, ctx: obj / 4, + decoder = lambda obj, ctx: obj * 4, + ), + Padding(3), + Struct("flags", + Flag("ns"), + Flag("cwr"), + Flag("ece"), + Flag("urg"), + Flag("ack"), + Flag("psh"), + Flag("rst"), + Flag("syn"), + Flag("fin"), + ), + ), + UBInt16("window"), + UBInt16("checksum"), + UBInt16("urgent"), + Field("options", lambda ctx: ctx.header_length - 20), +) + +if __name__ == "__main__": + cap = unhexlify(six.b("0db5005062303fb21836e9e650184470c9bc0000")) + + obj = tcp_header.parse(cap) + print (obj) + built = tcp_header.build(obj) + print (built) + assert cap == built + + + + + + + + + + + + + + + + diff --git a/external/construct/protocols/layer4/udp.py b/external/construct/protocols/layer4/udp.py new file mode 100644 index 0000000..42a951e --- /dev/null +++ b/external/construct/protocols/layer4/udp.py @@ -0,0 +1,26 @@ +""" +User Datagram Protocol (TCP/IP protocol stack) +""" +from construct import * +import six +from binascii import unhexlify + + +udp_header = Struct("udp_header", + Value("header_length", lambda ctx: 8), + UBInt16("source"), + UBInt16("destination"), + ExprAdapter(UBInt16("payload_length"), + encoder = lambda obj, ctx: obj + 8, + decoder = lambda obj, ctx: obj - 8, + ), + UBInt16("checksum"), +) + +if __name__ == "__main__": + cap = unhexlify(six.b("0bcc003500280689")) + obj = udp_header.parse(cap) + print (obj) + print (repr(udp_header.build(obj))) + + |