[英]Scapy, IndexError: Layer [Dot11] not found
我正在尝试使用 scapy 发送 HTTP 响应。 我嗅出一个请求,然后尝试编造一个响应。 我基于这个问题中的代码。 这是导致问题的代码:
import scapy.all as scapy
from scapy.layers.http import HTTPRequest
from scapy.layers.dot11 import RadioTap
from scapy.layers.dot11 import Dot11
packets = scapy.sniff(count=30)
for i in range(len(packets)):
if packets[i].haslayer(HTTPRequest):
pkt = packets[i]
dot11_frame = RadioTap()/Dot11(
type = "Data",
FCfield = "from-DS",
addr1 = pkt[scapy.Dot11].addr2,
addr2 = pkt[scapy.Dot11].addr1,
addr3 = pkt[scapy.Dot11].addr1,
)
在我嗅探数据包并获取所需的所有信息后,我做了其他人所做的事情,问题是我在定义 dot11_frame, IndexError: Layer [Dot11] not found
的部分不断收到此错误,这发生在行时addr1 = pkt[scapy.Dot11].addr2
运行。 我什至没有像一些答案建议的那样进行通配符导入。 那么我该如何解决这个错误呢?
首先,您可能是指pkt[Dot11]
,而不是[scapy.Dot11]
,因为您导入了名称Dot11
。
其次,您捕获的数据包似乎不包含Dot11
层。 例如,如果您从非 Wi-Fi 接口或未配置为监控接口的 Wi-Fi 接口捕获数据包,就会发生这种情况。
为了帮助您调试问题,您可以在分配pkt
变量后添加一个print(pkt.command())
。
此外,您可能想在认真使用 Scapy 之前学习一点 Python。 例如,而不是:
for i in range(len(packets)):
if packets[i].haslayer(HTTPRequest):
pkt = packets[i]
[...]
你想写:
for pkt in packets:
if HTTPRequest not in pkt:
continue
[...]
希望这可以帮助!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.