为什么跟踪路由发送UDP数据包,而不是ICMP的呢?
问题描述:
根据Stevens(TCP/IP Illustrated)的说法,traceroute程序使用增量TTL(1,2,3等)向目标主机发送UDP数据包,以获得来自ICMP TTL EXPIRED的中间跳信息消息。
的“目的地达到”条件是ICMP端口不可达消息,因为路由跟踪解决与大量的随机端口(即:不可能有人在那里听)
所以我的问题是:是否有一个技术原因(缺点,RFC中,等)的使用的UDP数据包,而不是使用,例如,ICMP回应请求消息(随TTL),并使用回波答复答案作为结束条件?
据我所知,ICMP回显应答可能通过中间防火墙或其他网络设备被过滤掉,但我想这也可以发生在UDP包;)为什么跟踪路由发送UDP数据包,而不是ICMP的呢?
非常感谢
塞尔吉奥
答
它实际上做traceroute的“老”方法。我想主要动机是,发出平原UDP数据包不需要特殊的权限,如发送ICMP报文做(原始套接字或同等学历)。这就是为什么例如ping
通常为setuid根,这是一个很大的风险安全明智的。
如今traceroute
也支持ICMP和TCP探测数据包,所以你更有可能潜入防火墙,这比没有考虑的部署更可能。这也意味着,traceroute
很可能也是您的系统上使用setuid root。看到它的手册页,特别是部分约可用的方法:http://linux.die.net/man/8/traceroute