4

我正在使用 scapy 函数 sniff() 进行数据包捕获。我只想捕获 EAP 数据包。我可以使用 tcpdump 使用以下过滤器过滤 EAP 数据包:

# tcpdump -i mon0 -p ether proto 0x888e
tcpdump:警告:mon0:未分配 IPv4 地址
tcpdump:详细输出被抑制,使用 -v 或 -vv 进行完整协议解码
监听 mon0,链路类型 IEEE802_11_RADIO(802.11 加上 radiotap 标头),捕获大小 65535 字节
13:04:41.949446 80847234901us tsft 48.0 Mb/s 2437 MHz 11g -16dB 信号天线 1 [bit 14] EAP 数据包 (0) v1, len 5
13:04:46.545776 80851831746us tsft 54.0 Mb/s 2437 MHz 11g -13dB 信号天线 1 [bit 14] EAP 数据包 (0) v1, len 5

同时,我使用相同的过滤器运行 sniff() 函数,但函数不捕获任何 EAP 数据包:

嗅探(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

4 回答 4

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 替换 ether,我仍然认为 EAP 为假,EAPOL 为真。

于 2013-04-28T19:54:52.357 回答
2

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

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

于 2015-02-06T03:06:23.060 回答
1

您是否正在与 scapy 嗅探同时运行 tcpdump?

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

于 2012-04-20T19:35:52.200 回答
1

这里可能有几个问题,所以让我来谈谈我今天刚刚遇到的一个问题。

首先,如以下错误报告所示:http ://trac.secdev.org/scapy/ticket/537 - Scapy 不支持嗅探函数中的 iface 参数。因此,要正确设置 iface,您必须使用:

conf.iface = 'mon0'

希望这将允许您添加过滤器并实际通过网络获取数据包。

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

于 2012-02-09T21:54:41.140 回答