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

Windows10系统下Scapy发送数据包失败且Wireshark无法捕获构造的DNS包

问题排查与解决步骤

1. 验证运行权限

  • Windows系统下Scapy调用raw socket发送三层数据包(你代码中使用的send()属于三层发包函数)必须要有管理员权限,若近期运行代码时没有以管理员身份启动终端/IDE,系统会直接丢弃Scapy的发包请求,不会有任何报错提示,Wireshark也捕获不到对应数据包。
  • 验证方式:右键点击你使用的命令提示符/PowerShell/IDE,选择「以管理员身份运行」,重新执行代码测试。

2. 修正网卡选择配置

  • 近期如果修改过网络环境(比如切换WiFi/有线网络、新增VPN/虚拟网卡、调整路由规则),Scapy自动匹配的发包网卡可能出错,数据包会被发送到错误的接口导致无法捕获。
  • 先执行以下代码打印所有可用网卡列表,找到你正在使用的物理网卡对应的名称或索引:
from scapy.all import show_interfaces
show_interfaces()
  • 修改send()调用逻辑,手动指定发包网卡,示例如下(将"以太网"替换为你查询到的实际网卡名):
send(dns_req, iface="以太网")

3. 排查安全软件拦截

  • 近期新安装的杀毒软件、终端安全管理工具、系统防火墙规则都可能拦截Scapy的raw socket发包请求,数据包还没离开系统层就被拦截,Wireshark自然无法捕获。
  • 临时关闭Windows Defender防火墙以及第三方杀毒软件的网络防护功能,重新运行代码测试,如果发包恢复正常,将Python解释器添加到对应安全软件的白名单即可。

4. 修正代码端口配置

  • 你代码中固定指定了源端口6900,如果该端口近期被其他程序占用,会直接导致发包失败。可以将源端口改为随机可用端口测试:
from scapy.all import RandShort
dns_req = IP(dst="8.8.8.8")/UDP(sport=RandShort(),dport=53)/DNS(rd=1, qd=DNSQR(qname="www.google.com", qtype="A"))
send(dns_req)

5. 修复抓包驱动与Scapy依赖

  • 要是以上步骤都无效,大概率是Scapy依赖的Npcap/WinPcap驱动出现异常,可能是近期系统更新导致的兼容问题。
  • 解决方式:先卸载当前安装的Npcap/WinPcap,重装最新版Npcap后再重新安装Scapy库:
pip uninstall scapy -y
pip install scapy

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 11:45:07