Python Scapy无线扫描并匹配存储在文本文件中的mac地址

2024-04-25 03:32:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一些代码可以扫描无线数据包并显示每个数据包的mac地址。我想做的是有一个mac地址的文本文件,当文件中的一个地址在无线扫描中被提取时,代码会用消息提醒我。我想不出一种方法来实现这一点,这里是无线扫描的代码,下面是文本文件的示例

import sys
from scapy.all import *

devices = set()

def PacketHandler(pkt):
    if pkt.haslayer(Dot11):
        dot11_layer = pkt.getlayer(Dot11)
    
        if dot11_layer.addr2 and (dot11_layer.addr2 not in devices):
            devices.add(dot11_layer.addr2)
            print dot11_layer.addr2

sniff(iface = sys.argv[1], count = int(sys.argv[2]), prn = PacketHandler)

下面是文本文件的示例

00:11:22:33:44:55
AA:BB:CC:DD:EE:FF

Tags: 代码importlayer示例mac地址sys数据包
1条回答
网友
1楼 · 发布于 2024-04-25 03:32:11

创建一个从.txt读取的函数,并将每一行(匹配MAC地址)存储在列表中

def getListMac() -> list: # you can put the path for your .txt file as argument
    with open('MAClist.txt', 'r+') as file:
         res = [x.rstrip('\n') for x in file.readlines()]
    return res

然后检查packetHandler函数,如果mac if在这个列表中。 这里您有两个选择:

  • 在程序开始时调用getListMac(),将其存储在全局变量中。如果您的.txt文件在启动程序后不会更改,请执行此操作
MACLIST = getListMac()

...
# in your PacketHandler function
if mac in MACLIST:
    print("mac found!") #or whatever your want to do
  • 每次嗅探数据包时调用该函数。如果MAC地址列表经常更改,并且在程序运行时需要更新,请选择此选项。要小心,因为这会减慢你的程序,尤其是当你的列表很长的时候
# in your PacketHandler function:
     if mac in getListMac():
         print("mac found!") # or whatever your want to do

最后,我将建议您使用真正的DBMS,这将比读取txt文件更有效

编辑

要回答您的评论:

修改getListMac函数以将信息存储在字典中

下面是一个示例,假设您使用“-”作为MAC-Time-Username之间的分隔符

def getListMac() -> dict: # you can put the path for your .txt file as argument
    with open('MAClist.txt', 'r+') as file:
         res = {x.rstrip('\n').split(" - ")[0]: x.rstrip('\n').split(" - ")[2] for x in file.readlines()}
    return res

按如下方式访问字典中的数据:

if MAC in MACLIST:
    print(f"MAC found -> {MAC}, Username -> {MACLIST[MAC]}")

相关问题 更多 >