You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何过滤广播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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 16:45:02