【问题标题】:Scapy filtering with sniff() function使用 sniff() 函数进行 Scapy 过滤
【发布时间】:2020-10-16 16:18:30
【问题描述】:

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

【问题讨论】:

  • 由于这是一个老问题,我将其作为评论留下:可能您确实捕获了数据包。但是,您的测试是错误的,EAP 是 python 中的一个类,而不是一个数据包,所以它永远不会在 pkts 中(这是一个对象列表,可能属于 Ether 类)。该声明应该类似于pkts[0].haslayer(EAP),或者更可能是pkts[0].haslayer(EAPOL)

标签: python scapy


【解决方案1】:

我知道这是一年多之后的事了,但为了让其他看到这个问题的人受益,答案是他捕获了 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 为真。

【讨论】:

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

    【讨论】:

      【解决方案3】:

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

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

      conf.iface = 'mon0'
      

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

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

      【讨论】:

        【解决方案4】:

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

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

        【讨论】:

        • scapy 不使用 tcpdump,它打开了自己的 L2 套接字。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-04-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-07-30
        • 1970-01-01
        相关资源
        最近更新 更多