我正在开发一个项目,用 Scapy 检测 Beacon 和 ProbeResponse 数据包中的无线加密。
我使用了关于 stackoverflow如何使用 Scapy 确定无线加密类型的另一个问题的解决方案?
这是我当前的脚本:
p = pkt[Dot11Elt]
essid, channel = None, None
cryptoSet = set()
while isinstance(p, Dot11Elt):
if p.ID == 0:
essid = p.info.decode("utf-8", "replace")
elif p.ID == 3:
channel = ord(p.info)
elif p.ID == 48:
cryptoSet.add("WPA2")
elif p.ID == 221 and p.info.startswith(b"\x00\x50\xf2\x01\x01\x00"):
cryptoSet.add("WPA")
p = p.payload
if not cryptoSet:
cap = pkt.sprintf("{Dot11Beacon:%Dot11Beacon.cap%}"
"{Dot11ProbeResp:%Dot11ProbeResp.cap%}").split('+')
if "privacy" in cap:
cryptoSet.add("WEP")
else:
cryptoSet.add("OPN")
crypto = "/".join(cryptoSet)
该脚本检测 SSID、信道、WPA2、WEP 和 OPN。但是当我收到一个带有 WPA 和 ID 221 的数据包时,我得到了一个错误。
AttributeError: 'p' object has no attribute 'info'
所以我需要一种不同的方法来解决这个问题。
我正在使用 Python 3.5.3 和 Scapy 2.4.0.dev581。开发,因为我也需要 RSSI。这在当前的开发版本中得到了解决。
任何想法如何解决这一问题?