我使用pcapy / impacket库在 Python 中解码网络数据包。它有一个 IP 解码器,它知道 IPv4 数据包的语法,但显然没有 IPv6 解码器。
有人得到吗?
Impacket维护人员在私人通信中表示,从 Scapy 开始可能会更好
Impacket 维护者推荐的 Scapy 目前没有 IPv6 解码。但是有一个非官方的扩展来这样做。
使用此扩展程序,它可以工作:
for packet in traffic:
if packet.type == ETH_P_IPV6 or packet.type == ETH_P_IP:
ip = packet.payload
if (ip.version == 4 and ip.proto == UDP_PROTO) or \
(ip.version == 6 and ip.nh == UDP_PROTO):
if ip.dport == DNS_PORT and ip.dst == ns:
all_queries = all_queries + 1
但是对于大的痕迹来说它非常慢。所以,我可能不得不尝试 Impacket,甚至回到 C。
我以前从未使用过 pcapy,但我确实在 C 项目中使用过 libpcap。正如 pcapy 页面所述,它没有静态链接到 libcap,因此您可以升级到支持 IPv6 的更新版本。
根据libpcap 更改日志,2008 年 10 月 27 日发布的 1.0 版具有默认 IPv6 支持(它应该具有更长的 IPv6,但现在默认使用该选项编译),因此您应该能够使用此选项捕获 IPv6 流量版本。最新的 pcapy 版本是从 2007 年 3 月 27 日开始的,所以它最多应该包括 2007 年 9 月 10 日发布的 0.9.8 版本的 libcap。
我不知道这是否足以让您能够捕获 IPv6 流量,因为 pcapy API 可能需要一些更改来支持它,而这在 pcapy 开发人员的屋顶上。
更新:显然pylibpcap是 libpcap 的 python 包装器,它的版本比 pcapy 更新,因此应该更好地支持更新的 libpcap 功能。
有关 PCAP (libpcap) 的更多信息,请点击此处。
您可以使用来自 google 的一个非常有用的单文件库
http://code.google.com/p/ipaddr-py/
支持 IPv4、IPv6、ip 验证、网络掩码和前缀管理等。它的编码和文档都很好。
祝你好运
埃米利奥