2008-12-15 69 views
2

我使用pcapy/impacket库来解码Python中的网络数据包。它有一个知道IPv4分组语法的IP解码器,但显然没有IPv6解码器。用于pcapy/impacket的IPv6解码器

有没有人得到一个?

在私人对应关系,在Impacket维护人员说,这可能是更好的开始Scapy

+0

看起来IPv6已被添加到反病毒软件:http://code.google.com/p/impacket/downloads/detail?name=impacket-0.9.9.9.tar.gz&can=2&q= – rupello 2012-11-25 11:11:20

回答

-1

我从来没有使用过pcapy,但我在C项目中使用libpcap的。由于pcapy页面指出它不是静态链接到libcap,所以你可以升级到一个新的IPv6支持。

根据libpcap changelog,2008年10月27日发布的版本1.0具有默认的IPv6支持(它应该有更长的IPv6,但现在默认使用该选项编译),所以您应该能够捕获IPv6与此版本的交通。最新的pcapy版本是从2007年3月27日开始的,所以最多它应该包含2007年9月10日发布的0.9.8版本的libcap。

我不知道这是否足够让你能够捕获IPv6流量,因为pcapy API可能需要一些更改才能支持它,这是在pcapy开发人员的屋顶上。

更新:显然pylibpcap,一个Python包装,以libpcap的,具有比pcapy新版本,所以新的libpcap的功能应该得到更好的支持。

关于PCAP(libpcap)的更多信息一般here

+0

我不是在说关于IPv6数据包的捕获*(libpcap长期以来的工作),而关于它们的解码。 libpcap不解码,你必须用低级C技巧自己做。 pcapy附带解码器。 – bortzmeyer 2008-12-21 21:00:18

1

由Impacket维护人员推荐的Scapy目前没有IPv6解码。但是有一个unofficial extension这样做。

有了这个扩展,它的工作原理:

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.

-1

您可以从

http://code.google.com/p/ipaddr-py/

即支持IPv4,IPv6的IP验证

使用一个真正有用的一个文件库从谷歌,网络掩码和前缀管理等等。它有很好的编码和记录。

好运
埃米利奥

+0

这可以通过`apt-get install python-ipaddr`在Ubuntu上完成 – 2013-05-30 20:16:05

1

你可能想看看dpkt,另一个包解析/建筑库。它是pypcap的作者写的,它是一个不同的libpcap包装器,但它不应该太难让它与pcapy一起工作,以查看它是否比Scapy更快。