如何使用scapy sniff-function过滤ICMPv6数据包?

时间:2017-09-09 10:40:28

标签: python-2.7 scapy

我想只捕获ICMPv6 Echo Request数据包。我使用scapy sniff() - 使用BPF过滤器的函数,与tcpdump相同。 我使用的过滤器与tcpdump一起工作,只捕获ICMPv6回应请求,但是当我在我的python脚本中使用它时,它根本不工作,scapy捕获所有数据包。 为什么过滤器在我的脚本中不起作用?

catalog_product_entity_media_gallery_value

输出:

#!/usr/bin/env python
from scapy.all import * 
a = sniff(filter="icmp6 && ip6[40] == 128", count=10)
a.summary()

2 个答案:

答案 0 :(得分:1)

我在我的系统上运行时遇到了一些问题,但结果却是我的一个接口上的错误v6设置。 scapy-python3似乎确实更好地处理了这个问题,它只是忽略了我的配置错误并继续执行而不是错误。

我解决了你的代码示例在python 2.7和3.x上运行时没有任何问题。当我手动指定界面以及何时不指定界面时

Ether / IPv6 / ICMPv6 Echo Request (id: 0x5d24 seq: 0x190)
Ether / IPv6 / ICMPv6 Echo Request (id: 0x5d24 seq: 0x191)
Ether / IPv6 / ICMPv6 Echo Request (id: 0x5d24 seq: 0x192)
Ether / IPv6 / ICMPv6 Echo Request (id: 0x5d24 seq: 0x193)
Ether / IPv6 / ICMPv6 Echo Request (id: 0x5d24 seq: 0x194)
Ether / IPv6 / ICMPv6 Echo Request (id: 0x5d24 seq: 0x195)
Ether / IPv6 / ICMPv6 Echo Request (id: 0x5d24 seq: 0x196)
Ether / IPv6 / ICMPv6 Echo Request (id: 0x5d24 seq: 0x197)
Ether / IPv6 / ICMPv6 Echo Request (id: 0x5d24 seq: 0x198)
Ether / IPv6 / ICMPv6 Echo Request (id: 0x5d24 seq: 0x199)

如果您有可能在python 3.x中测试它,它可能对您更好,但感觉您的设置中的某些内容已关闭。 我之前从未使用过scapy所以我不知道是否例如一条6到4号隧道会让它感到困惑。

我正在跑步:

Debian testing with kernel 4.11.0-1-amd64
scapy 2.3.3 on Python 2.7.13
scapy-python3 0.21 on Python 3.5.4

答案 1 :(得分:0)

您应该指定接口。在某些情况下(包括在PPP接口上或同时嗅探多个接口时),Scapy有时无法应用BPF过滤器。

另一种选择可能是使用Python过滤器而不是BPF过滤器。主要缺点是它会影响性能,因为Scapy会接收(并解析)接口上看到的所有数据包:

from scapy.all import * 
a = sniff(lfilter=lambda pkt: ICMPv6EchoRequest in pkt, count=10)
a.summary()