我只想捕获ICMPv6回声请求数据包。我使用使用BPF-过滤器的sniff()-function,与tcpdump相同。我使用的筛选器与tcpdump一起工作,并且只捕获ICMPv6回显请求,但是当我在python中使用它时,它根本不工作,替罪羊捕获所有数据包。为什么过滤器在我的脚本中不起作用?
#!/usr/bin/env python
from scapy.all import *
a = sniff(filter="icmp6 && ip6[40] == 128", count=10)
a.summary()产出:
Ether / IP / ICMP 192.168.1.74 > 192.168.1.84 echo-request 0 / Raw
Ether / IP / ICMP 192.168.1.84 > 192.168.1.74 echo-reply 0 / Raw
Ether / IPv6 / ICMPv6 Echo Request (id: 0x306 seq: 0x3bb)
Ether / IPv6 / ICMPv6 Echo Request (id: 0x306 seq: 0x3bb)
Ether / IPv6 / ICMPv6 Echo Reply (id: 0x306 seq: 0x3bb)
Ether / IPv6 / ICMPv6 Echo Reply (id: 0x306 seq: 0x3bb)
Ether / IP / TCP 192.168.1.84:ssh > 192.168.1.74:61336 PA / Raw
Ether / IP / TCP 192.168.1.74:61336 > 192.168.1.84:ssh A
Ether / IP / ICMP 192.168.1.74 > 192.168.1.84 echo-request 0 / Raw
Ether / IP / ICMP 192.168.1.84 > 192.168.1.74 echo-reply 0 / Raw发布于 2017-09-10 00:19:26
我在我的系统上运行时遇到了一些问题,但结果是我的一个接口上的v6设置有问题。替罪羊-python3 3似乎更好地处理了这个问题,它只是忽略了我的配置错误,继续执行,而不是出错。
在我解决了您的代码示例在python2.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)如果您有可能在python3.x中测试这一点,那么它可能会对您更好地工作,但是感觉您的设置中有些东西已经关闭了。我从来没有使用过替罪羊,所以我不知道,例如,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发布于 2017-09-09 13:14:52
您可能应该指定接口。Scapy有时无法在某些情况下应用BPF过滤器(包括PPP接口或同时嗅探多个接口时)。
另一种选择可以是使用Python过滤器而不是BPF过滤器。主要缺点是它会影响性能,因为Scapy将接收(并解析)在接口上看到的所有数据包:
from scapy.all import *
a = sniff(lfilter=lambda pkt: ICMPv6EchoRequest in pkt, count=10)
a.summary()https://stackoverflow.com/questions/46129782
复制相似问题