gpt4 book ai didi

python - 使用 dpkt 解析 ip 地址

转载 作者:太空宇宙 更新时间:2023-11-03 13:17:11 27 4
gpt4 key购买 nike

我正在使用 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 字段似乎有时包含似乎无法解析为 IP 地址的数据,例如 _daQ (_daQ 如何解析为地址?)或 RT\x00\x125\x02(什么是 RT?)或 33\x00\x01\x00\x03(开头的 33 是​​什么,为什么它看起来像 5 个字节而不是 4 个字节?)

最佳答案

  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)

关于python - 使用 dpkt 解析 ip 地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25370010/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com