【问题标题】:IPv6 decoder for pcapy/impacket用于 pcapy/impacket 的 IPv6 解码器
【发布时间】:2008-12-15 21:25:32
【问题描述】:

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

有人买吗?

在私人通信中,Impacket 维护人员说最好以Scapy 开头

【问题讨论】:

标签: python ipv6 packet-capture impacket pcapy


【解决方案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。

【讨论】:

    【解决方案2】:

    您可能想查看dpkt,这是另一个数据包解析/构建库。它是由 pypcap 的作者编写的,这是一个不同的 libpcap 包装器,但不难让它与 pcapy 一起工作,看看它是否比 Scapy 更快。

    【讨论】:

      【解决方案3】:

      我以前从未使用过 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,一个 libpcap 的 python 包装器,比 pcapy 有更新的版本,所以更新的 libpcap 功能应该得到更好的支持。

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

      【讨论】:

      • 我不是在谈论 IPv6 数据包的捕获(libpcap 长期以来一直在做的事情),而是关于它们的解码。 libpcap 不解码,您必须使用低级 C 技巧自己完成。 pcapy 自带解码器。
      【解决方案4】:

      您可以使用来自 google 的一个非常有用的单文件库

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

      支持 IPv4、IPv6、ip 验证、网络掩码和前缀管理等。它的编码和文档都很好。

      祝你好运
      埃米利奥

      【讨论】:

      • 这可以通过apt-get install python-ipaddr在Ubuntu上完成
      猜你喜欢
      • 2011-07-13
      • 1970-01-01
      • 2015-03-24
      • 1970-01-01
      • 2011-03-30
      • 1970-01-01
      • 2021-03-23
      • 2023-03-17
      • 1970-01-01
      相关资源
      最近更新 更多