为什么traceroute发送UDP数据包而不发送ICMP?

时间:2012-04-25 08:53:40

标签: networking udp icmp traceroute

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

非常感谢 塞尔吉奥

1 个答案:

答案 0 :(得分:13)

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

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

相关问题