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

Scapy存在Bug:忽略静态IPv6邻居(NDP)条目问题咨询

问题解决:Scapy发送IPv6数据包未使用静态NDP邻居条目

问题原因

你使用sendp()直接发送二层数据包时,Scapy不会主动查询系统的IPv6邻居(NDP)缓存,而是自行发起NDP地址解析请求;而ping或Scapy的send()/sr()等三层发送函数会依赖系统路由和邻居缓存机制,因此能正确使用静态配置的MAC地址。

解决方案

方案1:手动指定二层目标MAC

直接在Ether()层指定目标主机的MAC地址,跳过Scapy的自动地址解析:

#!/bin/python3

from scapy.all import *
from scapy.contrib.gtp import *

ipv6 = IPv6(src="2007::2",dst="2007::1")
udp = UDP(sport=2152, dport=2152)

while True:
    sendp(Ether(dst="08:00:27:a1:cd:f0")/ipv6/udp/"Hello World!")

方案2:改用三层发送函数send()

send()会自动处理三层到二层的封装,查询系统NDP缓存获取目标MAC:

#!/bin/python3

from scapy.all import *
from scapy.contrib.gtp import *

ipv6 = IPv6(src="2007::2",dst="2007::1")
udp = UDP(sport=2152, dport=2152)

while True:
    send(ipv6/udp/"Hello World!")

补充说明

这并非Scapy的Bug,而是sendp()的设计特性——它专门用于直接发送二层帧,不依赖系统网络栈的解析逻辑,因此需要手动处理二层头部参数;而三层发送函数会与系统网络栈交互,复用已有的邻居缓存条目。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 21:50:17