You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
39 lines
875 B
39 lines
875 B
"""
|
|
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)))
|
|
|