【用 Scapy 实现一个简单的局域网 MAC 地址扫描工具】
🛠️ 用 Scapy 实现一个简单的局域网 MAC 地址扫描工具
在进行内网渗透测试或设备管理时,我们经常需要快速发现局域网中活跃的设备。常见的做法是使用 ARP 扫描,但一些专用扫描工具(如 nmap)可能会被杀毒软件拦截,还有一些扫不出来
为了绕过检测,可以使用 Python 的 scapy 库自己实现一个轻量级的 ARP 扫描器。它不会触发大多数安全软件的警报。
✅ 库的安装
pip install scapy
✅ 功能说明
发送 ARP 请求扫描整个子网(如 10.26.167.0/24)
接收响应并提取 IP 和 MAC 地址
可根据已知 MAC 地址映射识别设备身份(如 robot12123)
🧪 示例代码
from scapy.all import ARP, Ether, srpdef get_mac_map():temp = '''90:de:81:73:cf:b1 -- rob23'''mac_map = {}for item in temp.split('\n'):item = item.strip().replace(' ', '')if not item:continuek, v = item.split('--')mac_map[k] = vreturn mac_mapmac_map = get_mac_map()target_ip = "10.26.167.0/24"
arp = ARP(pdst=target_ip)
ether = Ether(dst="ff:ff:ff:ff:ff:ff")
packet = ether / arpresult = srp(packet, timeout=2, verbose=0)[0]clients = []
for sent, received in result:clients.append({'ip': received.psrc, 'mac': received.hwsrc})print("Available devices in the network:")
for client in clients:print(f"{client['ip']} -> {client['mac']}")ip, mac = client['ip'], client['mac']if mac in mac_map:print(f"[Known Device] {mac_map[mac]} - {ip} ({mac})")
🔍 小结
这个脚本小巧灵活,可以轻松集成到其他网络探测项目中。通过自定义 get_mac_map() 函数,你可以维护一个内部设备的 MAC 地址数据库,用于自动识别特定设备。