Python 802.11解析器基于原始数据

2024-06-16 13:20:56 发布

您现在位置:Python中文网/ 问答频道 /正文

从原始套接字处理802.11解析器。解析器的目的是确定要保留多少数据包以供进一步处理。只保存第2层,所有第3层及以上的层都将被剥离。在安全部分之前一切都很好。WEP有4个字节的“头”,TKIP和CCMP有一个8字节的头。我正在寻找一个算法来确定帧是否有WEP或TKIP/CCMP头,但在google上找不到。我只需要确定是使用WEP,还是使用TKIP或CCMP。显然,我必须使用安全性“header”的前4个字节。在

我唯一能找到的是在impacket的dot11.py中找到的,它说:“现在我们必须区分WEP和WPA/WPA2,WPA/WPA2启用ExtIV(位5),禁用WEP”(原文如此)。在

macSz = n # current determination of mac frame size
if flags['protected']:
    # pf flag is set
    sec = frame[macSz:macSz+4] # get first 4 bytes of msdu
    bs = struct.unpack("=4B",sec)
    # wep test case returns bs = (231, 1, 0, 0)
    # ccmp test case returns bs = (2, 0, 79, 222)

    if bs[3] & 0x20:
        # using TKIP/CCMP
        macSz += 8
    else:
        # using WEP
        macSz += 4

我找不到任何文献来证实这一说法,上面的代码要么是我的错,要么是不起作用,因为在大多数情况下,它认为一切都是WEP。我发现WEP头中字节4的第5位应该是pad位,在TKIP中它是保留的,在CCMP中它是PN2的一部分。在

我的问题是,我是不是把代码写错了(我不这么认为),或者这不是确定WEP的正确方法,如果是后者,有人知道一个有效的算法吗。我不是密码学专家。在

在使用scapy之前,这可能是最终处理过程中的一个选项,但在这一点上不是一个选项,因为它消耗了太多的开销并丢弃了数据包。我只想确定第2层的数据包大小,包括要传递给进一步处理的未加密安全标头。在

编辑1: 根据这个链接http://www.xirrus.com/cdn/pdf/wifi-demystified/documents_posters_encryption_plotter在第5位(零索引)的第4字节中应该有1位的扩展IV,其中CCMP和TKIP都设置了该位。但是,我仍然不能让上面的代码工作。它似乎确实标识了TKIP,但仍然将CCMP分类为WEP,所以我的字节顺序中一定有一些内容。我会继续调查的

编辑2: 所以看起来像是字节排序。我一直在使用wireshark中捕获的数据包,复制hex进行测试。当我使用一个原始插座时,它能工作


Tags: of代码算法解析器ifbs字节数据包