来自原始套接字的Python 802.11解析器

时间:2014-07-28 14:29:08

标签: python 802.11 wpa wep

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

我唯一能找到的是确定是来自impacket的dot11.py,其中说:“现在我们必须区分WEP和WPA / WPA2 WPA / WPA2已启用ExtIV(位5)并禁用WEP” (SIC)。

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位应该是填充位,在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中捕获的数据包通过复制十六进制来测试。当我使用原始套接字时,它可以工作

0 个答案:

没有答案