linux下可以使用traceroute来探测从主机到目的机所需中转的路由设备。
其工作原理是:主机试图以最小的TTL存活时间(初次为1,后续依次增加)发出探测包,探索包经过路由器时,会将存活时间就会减1,当其存活时间为0时, 路由器会取消探测包的转发,并传送一个ICMP报文给源主机,并会在ICMP报文里包含路由器的IP,这样源主机就会获取依次所需经历的路由设备IP。
最后当目的主机在接收到TTL值为1的IP数据报时由于已经到达目的地,所以是不会丢失的,这样也不会产生一个超时的ICMP数据报文,traceroute程序会发送一个UDP数据报给目的主机,但它选择一个不可能的值作为UDP端口号(大于30000),使目的主机的任何一个应用程序都不可能使用该端口,因此,当该数据报达到目的主机的时候,目的主机会产生一个“端口不可达”错误的ICMP报文,这样,traceroute程序要做的就是区分接收到的ICMP报文是超时还是端口不可达,从而来区分是路由器还是目的主机。
1.安装
Ubuntu22.04下可以通过如下命令进行安装:
sudo apt install inetutils-traceroute
2. 命令格式
tracerou