SCAPY PYTHON - 获取 802.11 DS 状态

SCAPY PYTHON - Get 802.11 DS Status

我正在尝试使用 SCAPY 创建一个嗅探程序来演示 802.11 设备关联 [s] 和 802.11 网络中的角色。

SCAPY 具有简单的功能来识别 Beacon 帧、探测请求和探测响应。我正在尝试更深入地挖掘并根据 DS 状态进行我自己的评估以显示所有其他流量关联[s]。

我不能做的决定如何获取DS状态的值(00,01,10,11)。如果确定,那么我可以相应地处理帧以获得适合我的代码的 SOURCE、BSSID、RECEIVER、TRANSMITTER 和 DESTINATION。

我发现我应该能够使用 tshark (wlan.fc.ds) 获取 DS 状态,因此,如果需要,我可以将框架传递给 tshark 派生进程;但我首先想尝试使用 SCAPY 来完成这一切,因为我才刚刚开始使用 SCAPY 和 PYTHON 进行编码,我不想跳转到其他 MAC 框架分析程序第一关.

除了创建我的程序来演示设备关联;我也将它用作一种工具,让我了解更多有关 802.11、PYTHON 和 SCAPY 的信息,因此我希望深入研究每个帧,将它们分组到 DS 状态。 谢谢, 鲍勃

Scapy's source code 显示 To DSFrom DS 值位于 FCField 内(代表框架控制字段):

class Dot11(Packet):
    name = "802.11"
    fields_desc = [
                    BitField("subtype", 0, 4),
                    BitEnumField("type", 0, 2, ["Management", "Control", "Data", "Reserved"]),
                    BitField("proto", 0, 2),
                    FlagsField("FCfield", 0, 8, ["to-DS", "from-DS", "MF", "retry", "pw-mgt", "MD", "wep", "order"]),
                    ShortField("ID",0),
                    MACField("addr1", ETHER_ANY),
                    Dot11Addr2MACField("addr2", ETHER_ANY),
                    Dot11Addr3MACField("addr3", ETHER_ANY),
                    Dot11SCField("SC", 0),
                    Dot11Addr4MACField("addr4", ETHER_ANY) 
                    ]

因此,一旦您获得了一个 Dot11 数据包,您可以通过以下代码检查其 DS 状态:

DS = pkt.FCfield & 0x3
to_DS = DS & 0x1 != 0
from_DS = DS & 0x2 != 0