我想只捕获ICMPv6 Echo Request数据包 . 我使用scapy sniff() - 使用BPF过滤器的函数,与tcpdump相同 . 我使用的过滤器与tcpdump一起工作,只捕获ICMPv6回应请求,但是当我在我的python脚本中使用它时,它根本不工作,scapy捕获所有数据包 . 为什么过滤器在我的脚本中不起作用?
#!/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
2 回答
我有一些问题要在我的系统上运行,但结果是我的一个接口上的错误v6设置 . scapy-python3确实似乎更好地处理了这个问题,它只是忽略了我的配置错误并继续执行而不是错误输出 .
在我解决了你的代码示例在python 2.7和3.x上运行时没有任何问题 . 当我手动指定界面和不指定界面时 .
如果您有可能在python 3.x中测试它,它可能对您更好,但感觉您的设置中的某些内容已关闭 . 我从来没有使用过scapy所以我不知道是否例如6to4隧道会让它混淆 .
我在跑:
您应该指定接口 . 在某些情况下(包括在PPP接口上或同时嗅探多个接口时),Scapy有时无法应用BPF过滤器 .
另一种选择可能是使用Python过滤器而不是BPF过滤器 . 主要缺点是它会影响性能,因为Scapy将接收(并解析)接口上看到的所有数据包: