Scapy sr1()函数未返回响应包问题求助(Windows10+Python3环境)
解决Scapy在Windows 10下sr1()捕获不到ICMP响应的问题
我之前在Windows 10环境用Scapy的时候也碰到过一模一样的问题——Wireshark明明看到响应包回来了,但sr1就是卡在那不动,给你几个亲测有效的排查方向:
1. 必须以管理员身份启动Scapy-Shell
Windows对网络抓包的权限限制很严,普通用户权限下Scapy只能发包,没法正常捕获返回的数据包。右键点Scapy-Shell的启动快捷方式,选**"以管理员身份运行"**,重新执行你的命令试试,这是最常见的解决办法。
2. 手动指定网卡接口
有时候Scapy会自动选到错误的网卡(比如你电脑有多个网卡,比如无线+有线),导致发包和收包不在同一个接口。先执行命令看一下所有网卡:
show_interfaces()
找到对应你当前10.0.0.x网段的网卡名称,然后发包时加上iface参数,同时记得加timeout避免无限等待:
p = IP(dst='10.0.0.138')/ICMP(type='echo-request')/Raw('Hello') r = sr1(p, iface="你的网卡名称", timeout=5)
3. 检查Windows防火墙拦截
Windows防火墙可能把Scapy要接收的ICMP响应给拦了。你可以临时关闭防火墙测试一下,如果关闭后能正常收到响应,就去防火墙里加个规则:允许Python程序或者Scapy-Shell接收ICMP类型的数据包。
4. 升级Scapy到最新版本
旧版本的Scapy在Windows 10上可能有兼容性bug,用pip升级到最新版试试:
pip install --upgrade scapy
先从管理员权限这个方法开始试,大概率就能解决问题啦。
内容的提问来源于stack exchange,提问作者SomeOne




