Scapy中的src mac过滤数据包

时间:2018-10-04 17:23:15

标签: python wifi scapy

当我在Wireshark中使用此过滤器过滤数据包时:     wlan.sa == 04.b1.67.14.bd.64 一切顺利。

但是,我正在尝试使用scapy使用以下python脚本来执行此操作,但它从未被源mac过滤:

from scapy.all import *
from datetime import datetime
import traceback
# import MySQLdb

def getAverageSSI():
    global ssiFinal
    return ssiFinal

def setParams():
    global window
    global timestamp
    global SSID
    global datetime
    global iterator1
    window = 1
    timestamp = datetime.now()
    SSID='DefaultName'
    iterator1 = 0
    global ssiArray

    ssiArray = []


def myPacketHandler(pkt) :
    global SSID
    global timestamp
    global iterator1
    global ssiArray

    try :

        if pkt.haslayer(Dot11) :

            ssiNew = -(256-ord(pkt.notdecoded[-4:-3]))

            ssiArray.append(ssiNew)

            diffT=(datetime.now()-timestamp).seconds


            if diffT>window:

                print 'With MAC dst = %s with SSI Power= %s' %(pkt.addr1, sum(ssiArray)/len(ssiArray))
                print ssiArray
                ssiArray = []

                timestamp=datetime.now()

    except Exception as e:
        print 'Exception'
        print e
        traceback.print_exc()
        sys.exit(0)


setParams()

try:
    sniff(iface="wlan1", filter="ether src 04:b1:67:14:bd:64", prn = myPacketHandler, store=0)
except Exception as e:
    print e
    print "Sniff AP1 Off"

我还尝试过删除嗅探器中的过滤器,并放置一个if,如下所示:

if pkt.addr1 == '04:b1:67:14:bd:64' : # mac xiaomi mi a1

            # SSID = pkt.info;
            ssiNew = -(256-ord(pkt.notdecoded[-4:-3]))

            ssiArray.append(ssiNew)

            diffT=(datetime.now()-timestamp).seconds


            if diffT>window:

                # query = "START TRANSACTION;"
                # queryBack=cur.execute(query)

                # query = "INSERT INTO RSSI VALUES(%d,\"AP1\",%d);"%(iterator1,ssiNew)
                # queryBack = cur.execute(query)

                print 'MAC = %s with SSI Power= %s' %(pkt.addr1, sum(ssiArray)/len(ssiArray))

                ssiArray = []
                # Conexion.commit()

                # iterator1+=1

                timestamp=datetime.now()

但是它仅按目标mac进行过滤。

您知道如何像下面的wireshark图像一样通过mac进行正确过滤吗? (它的行为必须与wireshark过滤器中的行为完全相同):

enter image description here

1 个答案:

答案 0 :(得分:1)

如果您使用addr2而不是addr1,则您的第二种方法应该可以正常工作

Dot11 FCS packet

以下是它在802.11中的工作原理(是的,它确实很乱) How 802.11 addresses work

此外,您应该更新到github scapy版本,该版本直接支持RSSI(因此您不必解析未解码的内容)

RadioTap example

请参见https://github.com/secdev/scapy/archive/master.zip