Python 如何使用Scapy确定无线加密类型?
我正在做一项关于无线网络的安全研究,其中包括编写一个小工具,扫描附近的Wifi接入点。根据找到的加密类型,它将继续进行一些其他安全测试 到目前为止,我有python代码,它使用Scapy枚举不同的访问点,以及它们是否启用了加密(Enc=Y或Enc=N)。这方面的代码是:Python 如何使用Scapy确定无线加密类型?,python,security,wifi,scapy,Python,Security,Wifi,Scapy,我正在做一项关于无线网络的安全研究,其中包括编写一个小工具,扫描附近的Wifi接入点。根据找到的加密类型,它将继续进行一些其他安全测试 到目前为止,我有python代码,它使用Scapy枚举不同的访问点,以及它们是否启用了加密(Enc=Y或Enc=N)。这方面的代码是: def sniffAP(p): if ( (p.haslayer(Dot11Beacon) or p.haslayer(Dot11ProbeResp)) and not aps.has_
def sniffAP(p):
if ( (p.haslayer(Dot11Beacon) or p.haslayer(Dot11ProbeResp))
and not aps.has_key(p[Dot11].addr3)):
ssid = p[Dot11Elt].info
bssid = p[Dot11].addr3
channel = int( ord(p[Dot11Elt:3].info))
capability = p.sprintf("{Dot11Beacon:%Dot11Beacon.cap%}\
{Dot11ProbeResp:%Dot11ProbeResp.cap%}")
# Check for encrypted networks
if re.search("privacy", capability): enc = 'Y'
else: enc = 'N'
我想要的是能够使用python和scapy区分不同的加密类型(WEP、WPA、WPA2、WPS)。有什么想法吗?
根据airodump ng代码(aicrack ng suite),您要查找的信息位于特定的Dot11Elt
层中。顺便说一下,在您的代码中,您可以通过猜测SSID和通道位于第一层和第三层Dot11Elt
来获得它们,这似乎是事实,但我认为这不是强制性的
此代码应完成以下工作:
def insert_ap(pkt):
## Done in the lfilter param
# if Dot11Beacon not in pkt and Dot11ProbeResp not in pkt:
# return
bssid = pkt[Dot11].addr3
if bssid in aps:
return
p = pkt[Dot11Elt]
cap = pkt.sprintf("{Dot11Beacon:%Dot11Beacon.cap%}"
"{Dot11ProbeResp:%Dot11ProbeResp.cap%}").split('+')
ssid, channel = None, None
crypto = set()
while isinstance(p, Dot11Elt):
if p.ID == 0:
ssid = p.info
elif p.ID == 3:
channel = ord(p.info)
elif p.ID == 48:
crypto.add("WPA2")
elif p.ID == 221 and p.info.startswith('\x00P\xf2\x01\x01\x00'):
crypto.add("WPA")
p = p.payload
if not crypto:
if 'privacy' in cap:
crypto.add("WEP")
else:
crypto.add("OPN")
print "NEW AP: %r [%s], channed %d, %s" % (ssid, bssid, channel,
' / '.join(crypto))
aps[bssid] = (ssid, channel, crypto)
aps = {}
sniff(iface='mon0', prn=insert_ap, store=False,
lfilter=lambda p: (Dot11Beacon in p or Dot11ProbeResp in p))
更新:此代码现在已过时。此代码的更新版本已发布。是否尝试EAPeak?EAPeak看起来不错,但在我编写自己的代码时,我想知道如何利用scapy来确定数据包级别的加密类型。我想添加到自己的代码中,而不是使用整个其他工具