2012-02-09 122 views
3

我使用scapy函数嗅探()进行数据包捕获。我只想捕获EAP数据包。我可以使用tcpdump与以下过滤器过滤EAP包:Scapy过滤与嗅探()函数

 
# 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 

同时我有嗅探()函数相同的过滤器运行,但功能不捕捉任何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

由于这是一个老问题,我将其留作评论:可能你DID捕获了数据包。然而,你的测试是错误的,EAP是Python中的一个类,并不是一个数据包,因此它永远不会在'pkts'(这是一个对象列表,可能是类'Ether')。该语句应该是'pkts [0] .haslayer(EAP)',或者更可能是'pkts [0] .haslayer(EAPOL)' – KillianDS 2012-09-28 21:05:59

回答

1

你可以有几个问题在这里,让我来谈谈我刚刚遇到的那个。

首先,如下面的bug报告所示t:http://trac.secdev.org/scapy/ticket/537 - Scapy不遵守sniff函数中的iface参数。因此,要正确设置IFACE,你将不得不使用:

conf.iface = 'mon0' 

希望这将让您能够在线路中增加过滤器和实际得到的数据包。

如果你在mon0上嗅探,它是无线接口,你可能想尝试wlan proto而不是ether proto,但是我没有一个网络来测试EAP数据包以进一步提供帮助。

1

你是否在scapy sniff的同时运行tcpdump?

Scapy可以很好地模拟TCPDUMP。一次只运行一个。

+1

scapy不使用tcpdump,它会打开它自己的L2套接字。 – KillianDS 2012-09-28 20:55:03

5

我知道这是一年多后,但为了其他人看待这个问题的好处,答案是他捕获了EAPOL数据包,而不是EAP数据包。通过使用命令

sniff(filter="ether proto 0x888e", count=4) 

0x888e指EAPOL在以太网协议,这需要使用的醚原,而不是WLAN原的。我不知道如果0888e可以被称为在WLAN的原话,但这样做几乎相同的东西运(除了“乙醚”取代“WLAN”)后,我得到了

>>> EAP in b[0] 
False 

然而,当我进入

>>> EAPOL in b[0] 
True 

我相信OP捕捉他有什么代码正在寻找(2个EAPOL数据包),但他没有抓住什么,他以为他一直在寻找 - 2个EAP包。

编辑 - 即使我用ether替换wlan,我仍然想出EAP为false和EAPOL为true。

0

我认为这些都是部分的答案,一起工作给我。我做了:

conf.iface='wlan0.mon' 
a=sniff(filter='ether proto 0x888e', prn=lambda x: x.summary(), 
    count=100, store=1) 

然后我生成了一个EAPOL交换通过手动断开设备从WPA网络。当它试图重新关联时,我捕获了4路EAPOL交换。做一个> 4的计数,因为可能会有帧重传。 AFAIK,scapy不解码KEY数据,因此它被转储为十六进制字符串。