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

如何解决Scapy中sr()函数的超时设置不生效问题?

Scapy ICMP扫描超时参数不生效的解决办法

问题根源

  • sr()是为多数据包收发场景设计的,它的timeout参数是等待所有响应的总时长,而非单个数据包的超时阈值,所以设置0.01秒无法起到预期的快速超时效果。
  • 代码存在变量名错误:函数参数定义为host,但构造ICMP包时使用了未定义的destination变量,会导致逻辑异常。

修正方案

  1. 替换为sr1()函数:该函数专门用于发送单个数据包并等待第一个响应,超时参数会直接作用于单个包的等待逻辑,精准度更高。
  2. 修正变量名:将destination替换为函数参数host,保证逻辑一致性。
  3. 可选添加retry=0参数:禁用自动重试机制,彻底避免额外等待时间。

修正后的代码

def icmp_ping(host):
    icmp_packet = IP(dst=host)/ICMP()
    # sr1返回收到的第一个响应,超时则返回None
    response = sr1(icmp_packet, timeout=0.01, verbose=False, retry=0)
    # 可根据需求返回响应包,或直接返回主机是否可达的布尔值
    return response is not None

补充说明

如果仍存在轻微的超时偏差,可能是操作系统网络栈的默认限制(比如ICMP底层的重试机制),但上述修改已经能解决绝大多数快速扫描场景下的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 04:04:58