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

如何通过Scapy指定接口发送广播MAC地址执行ping操作

报错根因

核心是混淆了Scapy两个二层报文发送方法的返回值规则:

  • srp() 发送报文后返回(已应答报文对, 未应答报文)二元组,可直接用两个变量接收
  • srp1() 仅返回第一个收到的应答报文(单个对象),不存在二元组结构,所以用两个变量接收会触发解包报错

可行解决方案

1. 全量扫描网段(适配你扫192.168.1.0/24的需求,支持指定接口)

改用srp()方法,新增iface参数指定你要使用的网卡:

# 将iface参数的值替换为你的实际网卡名,Linux常见为ens33/eth0,Windows常见为"以太网"
ans, unans = srp(Ether(dst="ff:ff:ff:ff:ff:ff")/IP(dst="192.168.1.0/24")/ICMP(), timeout=2, iface="eth0")

2. 正确打印扫描结果

你之前调用ans.summary时用了ARP.psrc字段,你发送的是ICMP报文而非ARP请求,无ARP字段,修改为IP层字段即可:

ans.summary(lambda s,r: r.sprintf("%Ether.src% %IP.src%") )

3. 仅需要第一个应答的极简写法

如果只需要获取第一个响应的设备,直接用单个变量接收srp1()返回值即可:

# 同样替换iface为实际网卡名
resp = srp1(Ether(dst="ff:ff:ff:ff:ff:ff")/IP(dst="192.168.1.0/24")/ICMP(), timeout=2, iface="eth0")
if resp:
    print(resp.sprintf("%Ether.src% %IP.src%"))

内容的提问来源于stack exchange,提问作者michal shalman

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 19:15:03