summaryrefslogtreecommitdiff
path: root/external/construct/protocols/layer4
diff options
context:
space:
mode:
Diffstat (limited to 'external/construct/protocols/layer4')
-rw-r--r--external/construct/protocols/layer4/__init__.py4
-rw-r--r--external/construct/protocols/layer4/isup.py15
-rw-r--r--external/construct/protocols/layer4/tcp.py61
-rw-r--r--external/construct/protocols/layer4/udp.py26
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)))
+
+