我正在使用scapy函数sniff()进行数据包捕获。我想只捕获EAP数据包。我可以使用tcpdump使用以下过滤器过滤EAP数据包:
# tcpdump -i mon0 -p ether proto 0x888e tcpdump: WARNING: mon0: no IPv4 address assigned tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on mon0, link-type IEEE802_11_RADIO (802.11 plus radiotap header), capture size 65535 bytes 13:04:41.949446 80847234901us tsft 48.0 Mb/s 2437 MHz 11g -16dB signal antenna 1 [bit 14] EAP packet (0) v1, len 5 13:04:46.545776 80851831746us tsft 54.0 Mb/s 2437 MHz 11g -13dB signal antenna 1 [bit 14] EAP packet (0) v1, len 5
同时我使用相同的过滤器运行sniff()函数,但函数不捕获任何EAP数据包:
sniff(filter="ether proto 0x888e",iface="mon0", count = 1)
为什么sniff()函数不捕获任何EAP数据包?
修改
对不起我后来的反应,我尝试了你的建议:
> conf.iface = 'mon0'
> pkts = sniff(filter="wlan proto 0x888e", count = 1)
tcpdump: WARNING: mon0: no IPv4 address assigned
> pkts
Sniffed: TCP:0 UDP:0 ICMP:0 Other:1
> EAP in pkts[0]
False
但这仍然没有捕获EAP数据包:(
答案 0 :(得分:5)
我知道这是一年之后,但是为了其他任何人看到这个问题,答案是他捕获了EAPOL数据包,而不是EAP数据包。使用命令
sniff(filter="ether proto 0x888e", count=4)
0x888e指的是以太网协议中的EAPOL,它需要使用ether proto,而不是wlan proto。我不确定0888e是否可以被引用到wlan proto中的任何内容,但在完成与op相同的事情之后(除了用'ether'替换'wlan')我得到了
>>> EAP in b[0]
False
然而,当我进入
>>> EAPOL in b[0]
True
我相信OP捕获了他的代码正在寻找的东西(2个EAPOL数据包),但他没有捕获他认为他正在寻找的东西 - 2个EAP数据包。
编辑 - 即使我用wlan替换以太,我仍然认为EAP为false,而EAPOL为true。
答案 1 :(得分:1)
你可能在这里有几个问题,所以让我来谈谈我刚才遇到的问题。
首先,如以下错误报告中所示:http://trac.secdev.org/scapy/ticket/537 - Scapy不遵守嗅探功能中的iface参数。因此,要正确设置iface,您必须使用:
conf.iface = 'mon0'
希望这将允许您添加过滤器并实际通过线路获取数据包。
如果你正在嗅探mon0,它是一个无线接口,你可能想尝试wlan proto而不是ether proto,但是我没有网络来测试EAP数据包以进一步提供帮助。
答案 2 :(得分:1)
你是否在同时运行tcpdump scapy sniff?
Scapy可以很好地模拟TCPDUMP。一次只运行一个。
答案 3 :(得分:0)
我认为这些都是部分答案,一起对我有用。我做了:
conf.iface='wlan0.mon'
a=sniff(filter='ether proto 0x888e', prn=lambda x: x.summary(),
count=100, store=1)
然后我通过手动断开设备与WPA网络的连接来生成EAPOL交换。当它试图重新关联时,我捕获了4路EAPOL交换。计数> 4因为可能会有帧重传。 AFAIK,scapy不解码KEY数据,因此它被转储为十六进制字符串。