首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用Scapy确定无线加密类型?

如何使用Scapy确定无线加密类型?
EN

Stack Overflow用户
提问于 2014-02-06 20:14:33
回答 1查看 6.4K关注 0票数 5

我正在做一项无线网络的安全性研究,这涉及编码一个小工具,扫描附近的Wifi接入点。根据发现的加密类型,还会进行其他一些安全测试。

到目前为止,我有使用Scapy枚举不同访问点的python代码,以及它们是否已启用加密(Enc=、Y或Enc=N)。这方面的代码是:

代码语言:javascript
复制
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'

我想要的是能够区分不同的加密类型(WEP,WPA,WPA2,WPS)。有什么想法吗?

EN

回答 1

Stack Overflow用户

发布于 2014-02-09 19:43:42

基于airodump-ng代码(aicrack套件),您要查找的信息在特定的Dot11Elt层中。顺便说一句,在您的代码中,您可以通过猜测SSID和通道位于第一层和第三层来获得SSID和通道,这似乎是事实,但我不认为这是强制性的。

这段代码应该完成以下工作:

代码语言:javascript
复制
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))

更新:这段代码现在已经过时了。此代码的更新版本为集成到Scapy

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21613091

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档