Python使用Scapy实现局域网主机扫描并获取MAC地址
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()
代码解释:
- 导入必要的库: 导入
os模块用于执行系统命令,scapy.all用于网络数据包操作。 scan_hosts()函数:- 使用
os.popen()执行系统命令获取本机IP地址和MAC地址。 - 构造ARP请求包,目标IP地址为本机IP,目标MAC地址为广播地址。
- 使用
srp()函数发送ARP请求并接收响应,获取本机MAC地址。 - 根据本机IP地址计算出网段地址。
- 构造ARP请求包,目标IP地址为网段内所有主机,目标MAC地址为广播地址。
- 使用
srp()函数发送ARP请求并接收响应。 - 遍历响应结果,将扫描到的主机IP地址、MAC地址和本机MAC地址写入文件
hosts.txt中。
- 使用
- 调用
scan_hosts()函数: 执行局域网主机扫描。
注意事项:
- 需要安装Scapy库,可以使用命令
pip install scapy安装。 - 该代码需要在root权限下运行,否则无法发送ARP请求包。
通过以上代码,您可以快速扫描局域网内的主机,并获取到它们的IP地址和MAC地址。这对于网络管理、安全审计等场景都非常有用。
原文地址: https://www.cveoy.top/t/topic/jpiD 著作权归作者所有。请勿转载和采集!