123456789101112131415161718192021222324252627 |
- import struct
- def ip_unpack(data):
- vihl, tos, total_len, identification, flags_offset, TTL, proto, header_checksum, s_ip, d_ip = struct.unpack('! B B H H H B B H 4s 4s', data[:20])
- version = vihl>>4
- header_len = vihl & 15
- #Extracting x_bit, Do Not Fragment Flag and More Fragments Follow Flag.
- x_bit = (flags_offset >> 15) & 1
- DFF = (flags_offset >> 14) & 1
- MFF = (flags_offset >> 13) & 1
- #Extracting Fragment Offset
- frag_offset = flags_offset & 8191
- return version, header_len, tos, total_len, identification, x_bit, DFF, MFF, frag_offset, TTL, proto, header_checksum , getip(s_ip), getip(d_ip), data[20:]
- def getip(ip_bytes):
- return '.'.join(map(str, ip_bytes))
- def icmp_unpack(data):
- icmp_type, icmp_code, icmp_checksum = struct.unpack('! B B H', data[:4])
- return icmp_type, icmp_code, icmp_checksum, data[8:]
|