Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python scapy中src-mac对数据包的过滤_Python_Wifi_Scapy - Fatal编程技术网

Python scapy中src-mac对数据包的过滤

Python scapy中src-mac对数据包的过滤,python,wifi,scapy,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 ssi

在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"
我还尝试在sniff中删除过滤器,并放置一个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过滤器中的行为完全相同):


如果您使用
addr2
而不是
addr1

下面是它在802.11中的工作原理(是的,它真的很混乱)

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


请参阅@jflech的可能副本该解决方案不起作用,我已经尝试过了。你是对的。我把它和addr1搞混了。你知道我可以得到什么是addr1,addr2。。。?这让我很困惑。