summaryrefslogtreecommitdiff
path: root/external/construct/protocols/layer2/ethernet.py
diff options
context:
space:
mode:
Diffstat (limited to 'external/construct/protocols/layer2/ethernet.py')
-rw-r--r--external/construct/protocols/layer2/ethernet.py38
1 files changed, 38 insertions, 0 deletions
diff --git a/external/construct/protocols/layer2/ethernet.py b/external/construct/protocols/layer2/ethernet.py
new file mode 100644
index 0000000..d8d4bdd
--- /dev/null
+++ b/external/construct/protocols/layer2/ethernet.py
@@ -0,0 +1,38 @@
+"""
+Ethernet (TCP/IP protocol stack)
+"""
+from construct import *
+from binascii import hexlify, unhexlify
+import six
+
+
+class MacAddressAdapter(Adapter):
+ def _encode(self, obj, context):
+ return unhexlify(obj.replace("-", ""))
+ def _decode(self, obj, context):
+ return "-".join(hexlify(b) for b in obj)
+
+def MacAddress(name):
+ return MacAddressAdapter(Bytes(name, 6))
+
+ethernet_header = Struct("ethernet_header",
+ MacAddress("destination"),
+ MacAddress("source"),
+ Enum(UBInt16("type"),
+ IPv4 = 0x0800,
+ ARP = 0x0806,
+ RARP = 0x8035,
+ X25 = 0x0805,
+ IPX = 0x8137,
+ IPv6 = 0x86DD,
+ _default_ = Pass,
+ ),
+)
+
+
+if __name__ == "__main__":
+ cap = unhexlify(six.b("0011508c283c0002e34260090800"))
+ obj = ethernet_header.parse(cap)
+ print (obj)
+ print (repr(ethernet_header.build(obj)))
+