使用sniff()函数进行Scapy过滤

时间:2012-02-09 12:31:34

标签: python scapy

我正在使用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数据包:(

4 个答案:

答案 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数据,因此它被转储为十六进制字符串。