SCAPY PYTHON - 获取802.11 DS状态

时间:2015-06-12 20:10:40

标签: python-2.7 scapy 802.11

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

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

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

我发现我应该能够通过tshark(wlan.fc.ds)获取DS状态,因此,如果需要,我可以将帧传递给tshark派生进程;但我首先想尝试使用SCAPY来完成所有操作,因为我刚刚开始使用SCYY和PYTHON进行编码,而且我不想在第一个障碍时跳转到其他MAC帧分析程序。

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

1 个答案:

答案 0 :(得分:4)

Scapy's source code显示 To DS From DS 值位于FCField(代表帧控制 > Field):

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