首页 > 解决方案 > 在scapy中通过src mac过滤数据包

问题描述

当我在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过滤器中的行为完全相同):

在此处输入图像描述

标签: pythonwifiscapy

解决方案


addr2如果您使用而不是,您的第二种方法应该运行良好addr1

Dot11 FCS 数据包

这是它在 802.11 中的工作方式(是的,它真的很乱) 802.11 地址的工作原理

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

RadioTap 示例

https://github.com/secdev/scapy/archive/master.zip


推荐阅读