如何解决Python Scapy无线扫描并匹配存储在文本文件中的mac地址
我有一些代码可以扫描无线数据包并显示每个数据包中的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
解决方法
创建一个从.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。 在这里,您有两种选择:
- 在程序开始时调用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-时间-用户名之间的分隔符
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]}")
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。