Windows 11下Python Scapy抓包异常问题求助
Windows 11下Scapy抓包问题及解决方案
问题现象
- 使用
packet = scapy.sniff(iface=None, timeout=duration, filter="tcp")时,脚本能启动但无任何抓包记录。 - 指定接口
iface=if_to_sniff时,出现接口打开错误。
完整测试脚本
import os import scapy.all as scapy def sniff_traffic(filename, duration): intrf = scapy.get_if_list() intrf_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), "documents", unique_code, "intrf.txt") with open(intrf_path, "w") as f: for item in intrf: f.write(f"{item}\n") if_to_sniff = scapy.get_if_list()[0] writer = scapy.PcapWriter(filename) while True: packet = scapy.sniff(iface=if_to_sniff, timeout=duration, filter="tcp") if packet is None: break writer.write(packet) if __name__ == "__main__": unique_code = "a425c5a1-c788-43db-ae2a-cb9be6e7cc6f" pcap_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), "documents", unique_code, "packets.pcap") intrf_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), "documents", unique_code, "intrf.txt") duration = 5 sniff_traffic(pcap_path, duration)
解决建议
权限问题
Windows下抓包必须以管理员权限运行脚本,右键终端/IDE选择「以管理员身份运行」,这是接口打开错误的最常见原因。接口选择错误
scapy.get_if_list()[0]可能指向虚拟网卡或未启用的接口,可:- 查看生成的
intrf.txt,手动选择正在使用的物理网卡名称; - 用
scapy.get_working_if()获取当前活跃的默认接口,替代get_if_list()[0]。
- 查看生成的
无抓包记录的排查
iface=None时Scapy自动选的接口可能无流量,需确认选择的接口是当前有TCP流量的网卡;- 测试时主动发起TCP流量(比如打开浏览器访问网页),同时检查过滤器是否正确。
依赖检查
确保已安装Npcap(推荐替代WinPcap),安装时勾选「Install Npcap in WinPcap API-compatible Mode」,Scapy依赖它实现底层抓包。
Windows 11下正确使用Scapy的步骤
环境搭建
- 安装Python 3.7+并添加到系统PATH;
- 下载安装Npcap(管理员权限运行安装包);
- 执行
pip install scapy完成Scapy安装。
权限要求
所有抓包操作必须在管理员权限的终端/IDE中执行,否则会出现接口访问失败或无法捕获流量的问题。接口选择
- 用
scapy.get_if_list()列出所有可用接口; - 用
scapy.get_working_if()获取当前活跃的网络接口; - 也可通过
ipconfig命令查看适配器名称,手动指定匹配的接口。
- 用
抓包逻辑优化
scapy.sniff()超时后返回空的PacketList而非None,原脚本的if packet is None: break永远不会触发,可改为if len(packet) == 0: continue;- 无限循环抓包需添加终止条件,比如捕获指定数量的包或手动中断。
内容的提问来源于stack exchange,提问作者gc75
相关产品推荐
相关产品推荐

