【问题标题】:Why traceroute sends UDP packets and not ICMP ones?为什么 traceroute 发送 UDP 数据包而不是 ICMP 数据包?
【发布时间】:2012-05-05 22:36:02
【问题描述】:

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

非常感谢
塞尔吉奥

【问题讨论】:

    标签: networking udp icmp traceroute


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-05-16
      • 2019-05-08
      • 1970-01-01
      • 2013-09-15
      • 1970-01-01
      • 2016-06-01
      • 1970-01-01
      相关资源
      最近更新 更多