1

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

我唯一能找到的是确定是在 dot11.py from impacket 中说:“现在我们必须区分 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中捕获的数据包进行测试。当我使用原始套接字时,它可以工作

4

0 回答 0