【问题标题】:not getting all ICMP time-exceeded messages: why?没有收到所有 ICMP 超时消息:为什么?
【发布时间】:2012-06-09 13:28:42
【问题描述】:

我正在使用 Scapy 重放一些我更改 TTL 值的转储数据包。即使 TTL=1,我也得到了非常奇怪的结果。

当我在不同的时间运行测试时,大约有 40% 到 95% 的数据包回复了 ICMP 超时消息。然后我可以递归地重放未应答的数据包,并且每次得到的已应答数据包的百分比与以前差不多。

这是为什么呢?

我一直在以 0.1 秒的间隔发送数据包。这应该没问题吧?我的超时值是10s,应该很保守。

这里有什么问题?

【问题讨论】:

    标签: python packet icmp scapy ttl


    【解决方案1】:

    您所说的本质上是您只能在给定的时间范围内测试这么多无法访问的主机。一个可能的原因:许多路由器对 ICMP 消息进行速率限制。

    在做其他事情之前最好先测试一下ping是否成功;这样您就可以肯定地确认可达性。缺点是默认情况下 MS Windows 会阻止 ping。

    如果您不能先​​ping,那么您需要增加探测之间的时间,或者提高返回 ICMP 消息的路由器上的 ICMP 不可达率。

    编辑:

    根据 cmets,您似乎遇到了scapy 处理流量的能力。过去我通过使用scapy 发送并在后台生成tcpdump 以接收流量来提高吞吐量。

    【讨论】:

    • ICMP rate-limiting 也是我的猜测,但是今天我尝试再次发送所有内容,包间间隔甚至 5 秒,但我仍然没有得到回复至少 6我的 50 个数据包中有 -7 个数据包(小测试)。我在 Scapy 中使用 sr 函数。所以我想我会一次传递一个数据包,然后暂停 1 秒钟。好吧,这一次每个单个数据包都得到了答复。我猜是sr的实现有问题。
    • 我在scapy 看到过类似的问题,发送/接收流量很慢;在一个项目中,我实际上开始使用tcpdump 作为后台进程,它写入.pcap 文件,然后解析scapy 中的文件以查看我是否得到了正确的响应。
    • 我明白了。你知道 scapy 的 sr 函数的替代品吗?我真的只需要发送带有修改过的 TTL 值的数据包,并将它们与相应的 ICMP 消息配对。它在 Scapy 中看起来 /so/ 很简单,但为每个数据包调用 sr 需要很长时间。
    • 最后我尝试使用 tcpdump 来捕获传入的 icmp 数据包以解决其他一些问题。使用 scapy 的 send 发送意味着,与 sr 发生的情况相反,发送的数据包不会添加时间戳。因此我无法提取 RTTs 值。你知道这样做的方法吗?
    • 嗨,迈克,我正在再次查看这个问题,实际上 ICMP 速率限制不应该影响 time-exceeded 消息的生成,这正是我所关心的。它仅限制 ICMP unreachable 消息。因此,必须有其他东西干扰此类数据包的丢失。嗯……
    猜你喜欢
    • 1970-01-01
    • 2014-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-08
    • 1970-01-01
    • 1970-01-01
    • 2016-04-26
    相关资源
    最近更新 更多