diff options
Diffstat (limited to 'external/construct/protocols/layer2/ethernet.py')
-rw-r--r-- | external/construct/protocols/layer2/ethernet.py | 38 |
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))) + |