使用Python在Ubuntu上找出局域网所有IP和MAC地址
在一个局域网中,了解网络中所有设备的IP和MAC地址是网络管理和故障排查的重要环节。本文将介绍如何使用Python脚本在Ubuntu系统中找到本地网络上所有设备的IP和MAC地址,并利用matplotlib
生成饼状图来展示各个设备的比例。
步骤概述
- 获取局域网IP段:首先,我们需要确定自己的局域网IP段,通常我们使用
ifconfig
或ip a
命令来查看。 - 使用Python扫描网络:使用Python库,如
scapy
,可以方便地在局域网中进行扫描,抓取MAC地址和IP地址。 - 数据可视化:使用
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地址。这对于网络的管理和维护是非常重要的。务必确保自己的网络安全,确保未授权的设备不会连入局域网。在使用该工具时,请遵循当地法律法规,以避免引发不必要的麻烦。希望这篇文章能帮助你更好地理解网络设备的管理!