我正在使用 dpkt 来解析 pcap 文件,但是我对如何提取目标 IP 地址感到困惑。我正在使用 eth = dpkt.ethernet.Ethernet(buf)
解析数据包,该代码返回一个如下所示的以太网对象:
Ethernet(src='\x00\x1a\xa0kUf', dst='\x00\x13I\xae\x84,', data=IP(src='\xc0\xa8\n\n',
off=16384, dst='C\x17\x030', sum=25129, len=52, p=6, id=51105, data=TCP(seq=9632694,
off_x2=128, ack=3382015884, win=54, sum=65372, flags=17, dport=80, sport=56145)))
我对两件事感到困惑。
我尝试了类似 Convert "little endian" hex string to IP address in Python 的解决方案,但两个 dst 字段似乎有时都包含看似无法解析为
_daQ
(如何将 _daQ 解析为地址?)或 RT\x00\x125\x02
(什么是 RT?)或 33\x00\x01\x00\x03
(什么是开头的 33,为什么这看起来像 5 个字节而不是 4 个?) 最佳答案
eth.dst
字段将包含目标 MAC 地址(例如 01:23:45:67:89:ab
),而不是目标 IP 地址。您需要 ip.dst 字段。 试试这个:
ip_hdr = eth.data
ip_hdr.dst # will contain your destination IP address in BINARY
# adapted from http://www.commercialventvac.com/dpkt.html#mozTocId303989
import socket
dst_ip_addr_str = socket.inet_ntoa(ip_hdr.dst)
关于python - 用dpkt解析ip地址,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25370010/