16

根据 Stevens (TCP/IP Illustrated) 的说法,traceroute程序将 UDP 数据包发送到具有增量 TTL(1、2、3 等)的目标主机,以从ICMP TTL EXPIRED消息中获取中间跃点信息。
目的地已到达”条件是ICMP PORT UNREACHABLE消息,因为 traceroute 寻址一个具有高数字的随机端口(即:不太可能有人在那里监听)
所以我的问题是:是否存在技术原因(缺点、RFC 等? ) 使用 UDP 数据包而不是使用例如ICMP 回显请求消息(具有增加的 TTL)并使用回显答复作为结束条件?
我知道 ICMP 回显回复可能会被中间的防火墙或其他网络设备过滤掉,但我想这也可能发生在 UDP 数据包中;)

非常感谢
塞尔吉奥

4

1 回答 1

15

这实际上是进行跟踪路由的“旧”方法。我想主要的动机是发送普通的 UDP 数据包不需要特殊权限,就像发送 ICMP 数据包一样(原始套接字或等效的)。这就是为什么 egping通常将 setuid 设置为 root 的原因,这在安全方面是一个很大的风险。

现在traceroute还支持 ICMP 和 TCP 探测数据包,因此您更有可能偷偷通过防火墙,而这些防火墙很可能在没有考虑的情况下部署。这也意味着traceroute您的系统上可能也是 setuid root。请参阅其手册页,尤其是有关可用方法的部分:http: //linux.die.net/man/8/traceroute

于 2012-04-25T10:59:01.140 回答