调整scapy以识别特定探针

时间:2017-08-04 14:56:19

标签: python scapy

我正在尝试修改以下脚本,以便在检测到与特定格式匹配的探测时能够在终端中发出警报。我想要匹配的格式是' KD - ??????????????任何人都可以帮助我吗?

#!/usr/bin/env python
# -- coding: utf-8 --

from scapy.all import *

unique_probe = []

def Handler(pkt):
    if pkt.haslayer(Dot11): # 802.11
        if pkt.type == 0 and pkt.subtype == 4: # mgmt, probe request
            if pkt.addr2 not in unique_probe :
            unique_probe.append(pkt.addr2)
#####need something here to match pkt.info to a condition e.g. if pkt.info=KD* then
                print "MAC: %s probing for %s possible use of KarmaDetector" %(pkt.addr2, pkt.info)

sniff(iface="wla0mon", count=0, prn=Handler, store=0) # sudo rfkill unblock wifi && sudo airmon-ng start wlan0

1 个答案:

答案 0 :(得分:0)

首先,如果您想要唯一值,请不要使用list个对象。使用set个对象。

其次,您可以使用Dot11 in pkt而不是pkt.haslayer(Dot11)

然后,您只需要解析Dot11Elt图层以找到相关值:

from scapy.all import *

unique_probes = set()

def handle(pkt):
    if Dot11 in pkt and (pkt.type, pkt.subtype) == (0, 4):
        unique_probes.add(pkt.addr2)
        try:
            subpkt = pkt[Dot11Elt]
        except KeyError:
            pass
        while isinstance(subpkt, Dot11Elt):
            if subpkt.ID == 0:  # SSID
                if subpkt.info.startswith('KD-'):
                    print "MAC %s probing for %s possible use of KarmaDetector" % (pkt.addr2, subpkt.info)
                break
            pkt = pkt.payload

sniff(iface="wla0mon", count=0, prn=handler, store=0) # sudo rfkill unblock wifi && sudo airmon-ng start wlan0