首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用dpkt解析ip地址

用dpkt解析ip地址
EN

Stack Overflow用户
提问于 2014-08-18 18:43:58
回答 1查看 11.5K关注 0票数 4

我正在使用dpkt解析pcap,但是我对如何提取目标ip地址感到困惑。我使用eth = dpkt.ethernet.Ethernet(buf)解析数据包,它返回一个以太网对象,如下所示:

代码语言:javascript
复制
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表单的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个字节?)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-08-18 20:25:13

  1. eth.dst字段将包含目标MAC地址(例如01:23:45:67:89:ab),而不是目标IP地址。您需要ip.dst字段。
  2. 这些字符串是字节字符串,而不是ASCII (或其他)编码的可读字符串。

试试这个:

代码语言:javascript
复制
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)
票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25370010

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档