我正在使用 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
At the same time I have sniff() function running with the same filter, but function doesn't capture any EAP packets:
sniff(filter="ether proto 0x888e",iface="mon0", count = 1)
Why sniff() function doesn't capture any EAP packets?
EDIT:
Sorry for my late reaction, I tried what you proposed:
> 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 数据包:(
最佳答案
我知道这是一年多之后,但为了其他看这个问题的人的利益,答案是他捕获了 EAPOL 数据包,而不是 EAP 数据包。通过使用命令
sniff(filter="ether proto 0x888e", count=4)
0x888e 指的是以太网协议(protocol)中的 EAPOL,它需要使用 ether proto,而不是 wlan proto。我不确定 0888e 是否可以指代 wlan proto 中的任何内容,但是在做了与 op 几乎相同的事情之后(除了将 'wlan' 替换为 'ether'),我得到了
>>> EAP in b[0]
False
但是当我进入
>>> EAPOL in b[0]
True
我相信 OP 捕获了他的代码正在寻找的内容(2 个 EAPOL 数据包),但他没有捕获他认为要寻找的内容 - 2 个 EAP 数据包。
编辑 - 即使我用 wlan 替换以太,我仍然认为 EAP 为假,EAPOL 为真。
关于python - 使用 sniff() 函数进行 Scapy 过滤,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9210879/