使用Python在Ubuntu上找出局域网所有IP和MAC地址

在一个局域网中,了解网络中所有设备的IP和MAC地址是网络管理和故障排查的重要环节。本文将介绍如何使用Python脚本在Ubuntu系统中找到本地网络上所有设备的IP和MAC地址,并利用matplotlib生成饼状图来展示各个设备的比例。

步骤概述

  1. 获取局域网IP段:首先,我们需要确定自己的局域网IP段,通常我们使用ifconfigip a命令来查看。
  2. 使用Python扫描网络:使用Python库,如scapy,可以方便地在局域网中进行扫描,抓取MAC地址和IP地址。
  3. 数据可视化:使用matplotlib库生成饼状图,直观地表示各个设备在网络中的比例。

安装必要的库

在执行代码之前,我们需要确保安装了必要的Python库。打开终端并执行以下命令:

sudo apt-get install python3-pip
pip3 install scapy matplotlib

Python代码示例

以下是用于扫描局域网并获取所有IP和MAC地址的Python脚本:

from scapy.all import ARP, Ether, srp
import matplotlib.pyplot as plt

def scan_network(ip_range):
    # 创建ARP请求和以太网帧
    arp = ARP(pdst=ip_range)
    ether = Ether(dst="ff:ff:ff:ff:ff:ff")
    packet = ether/arp

    # 发送数据包并接收响应
    result = srp(packet, timeout=3, verbose=0)[0]

    devices = []
    for sent, received in result:
        devices.append({'ip': received.psrc, 'mac': received.hwsrc})
    return devices

# 设置你的IP范围,这里假设是192.168.1.0/24
ip_range = "192.168.1.0/24"
devices = scan_network(ip_range)

# 输出扫描到的设备信息
for device in devices:
    print(f"IP: {device['ip']}, MAC: {device['mac']}")

# 绘制饼状图
labels = [device['ip'] for device in devices]
sizes = [1] * len(devices) # 每个设备的比例为1

plt.pie(sizes, labels=labels, autopct='%1.1f%%')
plt.title('局域网设备分布')
plt.show()

脚本解释

  • scan_network函数:构建一个ARP请求包,并发送到指定的IP范围,接收响应后提取设备的IP和MAC地址。
  • 执行扫描后,脚本会逐一打印出找到的设备信息。
  • 使用matplotlib库绘制饼状图,以便更直观地查看网络中各个设备的分布。

饼状图示例

生成的饼状图将展示可用IP地址的信息比例:

pie
    title 局域网设备分布
    "设备1": 1
    "设备2": 1
    "设备3": 1
    ...

结尾

通过使用上述Python脚本,我们可以有效地扫描局域网并获取所有设备的IP和MAC地址。这对于网络的管理和维护是非常重要的。务必确保自己的网络安全,确保未授权的设备不会连入局域网。在使用该工具时,请遵循当地法律法规,以避免引发不必要的麻烦。希望这篇文章能帮助你更好地理解网络设备的管理!