如何从 Dot11 数据包解码数据



我正在编写一个程序来捕获 Dot11 数据包以进行网络安全测试,在这些捕获的数据包中,我获取的数据如下所示:

<RadioTap  version=0 pad=0 len=36    present=TSFT+Flags+Rate+Channel+dBm_AntSignal+b14+b29+Ext notdecoded=' x08x00x00x00x00x00x00xd5~xbb*x00x00x00x00x10x02x99txa0x00xbdx00x00x00xbdx00' |<Dot11  subtype=11L type=Management proto=0L FCfield=retry ID=14849 addr1=48:ee:0c:f4:b7:ea addr2=00:26:82:8e:9a:d4 addr3=48:ee:0c:f4:b7:ea SC=46176 addr4=None |<Dot11Auth  algo=open seqnum=1 status=success |<Dot11Elt  ID=220 len=46 info='7x94' |>>>>

我想更好地理解以下部分:

x08x00x00x00x00x00x00xd5~xbb*x00x00x00x00x10x02x99txa0x00xbdx00x00x00xbdx00

我在许多不同的捕获中获得了这些类型的数据包,我希望能够"解码"它们以读取数据。有没有办法做到这一点,也许是一个代码示例?

我通过 scapy 解码 802.11 帧。

首先,通过终端或 WireShark 捕获 802.11 帧并另存为 pcap 文件。
然后,使用 scapy 解析 pcap 文件:

sniff(offline="/tmp/capture_chan11.pcap", prn=parse)

"parse"是一个自定义函数,用于处理 pcap 文件中的每个帧,我的是:

def parse(frame):
    if frame.haslayer(Dot11):
        print("ToDS:", frame.FCfield & 0b1 != 0)
        print("MF:", frame.FCfield & 0b10 != 0)
        print("WEP:", frame.FCfield & 0b01000000 != 0)
        print("src MAC:", frame.addr2)
        print("dest MAC:", frame.addr1)
        print("BSSID:", frame.addr3)
        print("Duration ID:", frame.ID)
        print("Sequence Control:", frame.SC)
        print(feature(frame))
        print("n")

查看有关 Dot11 帧属性的更多信息:SCAPY PYTHON - 获取 802.11 DS 状态

正如字段名称允许您猜测的那样,它包含无法解码的数据。如果你真的想解码它,你必须编写(也许贡献!(你自己的剖析器,或者使用Wireshark(或Tshark,相同的剖析器,命令行界面(为你解析数据包。

对于第二个选项,您可以将 Scapy 的wireshark(pkt)用于 Wireshark,tcpdump(pkt, prog="tshark")用于 Tshark。

更新:自从Scapy的最新开发版本以来,这些字段现在可以正确解码。

看看 github 版本:https://github.com/secdev/scapy

或在此处下载https://github.com/secdev/scapy/archive/master.zip

最新更新