用dp解析ip地址

2024-05-14 10:10:21 发布

您现在位置:Python中文网/ 问答频道 /正文

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

我对两件事感到困惑。

  1. 我应该抓取以太网中的dst字段,还是IP(Ethernet.data)中的dst字段?
  2. 如何将这些奇怪的字符串转换成x.x.x.x格式的ip地址,其中x是0-255之间的整数?

我尝试了类似Convert "little endian" hex string to IP address in Python的解决方案,但两个dst字段有时似乎都包含一些数据,这些数据似乎无法解析为_daQ(如何将daQ解析为address?)或者RT\x00\x125\x02(什么是RT?)或者33\x00\x01\x00\x03(开头的33是什么,为什么看起来像5字节而不是4?)


Tags: 数据ipsrcdataaddress地址dstsum
1条回答
网友
1楼 · 发布于 2024-05-14 10:10:21
  1. eth.dst字段将包含目标MAC地址(例如01:23:45:67:89:ab),而不是目标IP地址。你需要ip.dst字段。
  2. 字符串是字节字符串,而不是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)

相关问题 更多 >

    热门问题