【用 Scapy 实现一个简单的局域网 MAC 地址扫描工具】

发布于:2025-07-08 ⋅ 阅读:(26) ⋅ 点赞:(0)

🛠️ 用 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, srp

def 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:
            continue
        k, v = item.split('--')
        mac_map[k] = v
    return mac_map

mac_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 / arp

result = 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 地址数据库,用于自动识别特定设备。


网站公告

今日签到

点亮在社区的每一天
去签到