我正在使用 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)))

我对两件事感到困惑。
  • 我应该抓取以太网中的 dst 字段,还是 IP (Ethernet.data) 中的字段?
  • 如何将这些奇怪的字符串转换为 x.x.x.x 形式的 ip 地址,其中 x 是 0-255 之间的整数?

  • 我尝试了类似 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 字段。
  • 字符串是字节字符串,而不是 ASCII(或其他)编码的可读字符串。

  • 试试这个:
    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/

    10-11 22:06
    查看更多