如何过滤广播MAC地址,使用pyshark仅打印真实有效的MAC地址
问题原因
- 你代码里定义的空MAC匹配值
e_mac使用点.作为分隔符,但实际捕获到的ARP包中空MAC地址是冒号:分隔,二者不相等导致过滤判断完全失效 - 当前代码设置了
sniff(timeout=3),3秒没有捕获到包就会停止运行,不符合无有效MAC时持续等待的需求
修正后代码
import time import pyshark # 定义无效MAC地址,使用和捕获结果一致的冒号分隔格式 INVALID_MAC = '00:00:00:00:00:00' # 初始化抓包实例,过滤ARP协议 capture = pyshark.LiveCapture(interface='wlo2', bpf_filter='arp') # 持续捕获包,无超时限制,每收到一个包就处理 for packet in capture.sniff_continuously(): dst_ip = packet.arp.dst_proto_ipv4 dst_mac = packet.arp.dst_hw_mac # 仅当MAC不是无效值时打印 if dst_mac != INVALID_MAC: print(time.strftime('%b %d %H:%M:%S '), dst_mac, dst_ip)
调整说明
- 修正了无效MAC的分隔符,保证和捕获输出的格式匹配,过滤逻辑可以正常生效
- 把固定超时的
sniff()方法替换为sniff_continuously(),程序会一直等待捕获新的ARP包,不会主动停止 - 简化了不必要的字典变量,逻辑更清晰
内容的提问来源于stack exchange,提问作者roXx
相关产品推荐
相关产品推荐

