欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 维修 > python之使用scapy扫描本机局域网主机,输出IP/MAC表

python之使用scapy扫描本机局域网主机,输出IP/MAC表

2025/3/13 0:50:35 来源:https://blog.csdn.net/qq_57764123/article/details/146159358  浏览:    关键词:python之使用scapy扫描本机局域网主机,输出IP/MAC表

安装scapy库

pip install scapy -i https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple

扫描本机局域网的所有主机,输出IP/MAC对于表

# -*- coding: UTF-8 -*-
import netifaces
from scapy.all import srp
from scapy.layers.l2 import ARP, Ether
import ipaddressdef get_local_network():"""获取本机IP段/掩码"""ip_mask = []for iface in netifaces.interfaces():addrs = netifaces.ifaddresses(iface)if netifaces.AF_INET in addrs:for addr_info in addrs[netifaces.AF_INET]:if 'addr' in addr_info and 'netmask' in addr_info:ip = addr_info['addr']mask = addr_info['netmask']if ip != '127.0.0.1':network = ipaddress.IPv4Network(f"{ip}/{mask}", strict=False)netmask = sum(bin(int(x)).count('1') for x in mask.split('.'))ip_mask.append(f"{network.network_address}/{netmask}")return ip_maskdef scan_network(ip_range):"""扫描指定 IP 范围内的主机,获取 IP 和 MAC 地址的对应关系:param ip_range: IP 范围,例如 "192.168.0.0/24":return: IP/MAC 对应表"""# ARP 请求包arp_request = ARP(pdst=ip_range)# 广播帧ether_frame = Ether(dst="ff:ff:ff:ff:ff:ff")# 数据包packet = ether_frame / arp_request# 发送并接收响应result = srp(packet, timeout=3, verbose=0, filter="arp")[0]# 解析结果ip_mac_table = []for sent, received in result:ip = received.psrcmac = received.hwsrcip_mac_table.append((ip, mac))return ip_mac_tabledef print_ip_mac_table(ip_mac_table):"""打印 IP/MAC 对应表:param ip_mac_table: IP/MAC 对应表"""print("IP/MAC 对应表:")print("-" * 35)print(f"{'IP':<15}{'MAC':<17}")print("-" * 35)for ip, mac in ip_mac_table:print(f"{ip:<15}{mac:<17}")print("-" * 35)if __name__ == "__main__":ip_mac_table_result = []for ip_range in get_local_network():print(f"开始扫描 {ip_range} ...")ip_mac_table_result += scan_network(ip_range)print_ip_mac_table(ip_mac_table_result)

输出

开始扫描 192.168.0.0/24 ...
IP Address       MAC Address         
--------------------------------------
192.168.0.113    4c:5f:70:6d:db:ca

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词