Python使用Scapy实现局域网主机扫描并获取MAC地址

本文将介绍如何使用Python的Scapy库进行局域网主机扫描,并获取扫描到的主机IP地址和MAC地址。

代码示例:

import os
from scapy.all import *

def scan_hosts():
    # 获取本机IP地址
    local_ip = os.popen('ifconfig | grep "inet " | awk '{print $2}'').read().strip()
    # 构造本机的ARP请求包
    local_arp = ARP(pdst=local_ip, hwdst='ff:ff:ff:ff:ff:ff')
    # 发送ARP请求包并接收响应
    ans, unans = srp(local_arp, timeout=2, verbose=False)
    # 获取本机的MAC地址
    local_mac = ans[0][1].hwsrc
    # 获取本机网段
    local_network = '.'.join(local_ip.split('.')[:-1]) + '.0/24'
    # 发送ARP请求包扫描主机
    ans, unans = srp(Ether(dst='ff:ff:ff:ff:ff:ff')/ARP(pdst=local_network), timeout=2, verbose=False)
    # 将扫描到的主机IP地址和MAC地址存入文件中
    with open('hosts.txt', 'w') as f:
        for send, recv in ans:
            f.write(recv.sprintf('%ARP.psrc% %Ether.src% %s\n' % local_mac))
    print('扫描完成,结果已保存到hosts.txt文件中。')

scan_hosts()

代码解释:

  1. 导入必要的库: 导入 os 模块用于执行系统命令,scapy.all 用于网络数据包操作。
  2. scan_hosts() 函数:
    • 使用 os.popen() 执行系统命令获取本机IP地址和MAC地址。
    • 构造ARP请求包,目标IP地址为本机IP,目标MAC地址为广播地址。
    • 使用 srp() 函数发送ARP请求并接收响应,获取本机MAC地址。
    • 根据本机IP地址计算出网段地址。
    • 构造ARP请求包,目标IP地址为网段内所有主机,目标MAC地址为广播地址。
    • 使用 srp() 函数发送ARP请求并接收响应。
    • 遍历响应结果,将扫描到的主机IP地址、MAC地址和本机MAC地址写入文件 hosts.txt 中。
  3. 调用 scan_hosts() 函数: 执行局域网主机扫描。

注意事项:

  • 需要安装Scapy库,可以使用命令 pip install scapy 安装。
  • 该代码需要在root权限下运行,否则无法发送ARP请求包。

通过以上代码,您可以快速扫描局域网内的主机,并获取到它们的IP地址和MAC地址。这对于网络管理、安全审计等场景都非常有用。

Python使用Scapy实现局域网主机扫描并获取MAC地址

原文地址: https://www.cveoy.top/t/topic/jpiD 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录