我们的PC发送的数据包会经过家庭路由器、运营商、服务器的路由器等等多重路由器才能到达目标服务器。使用Tracert命令可以知道途径了那些路由器。
直接Windows直接打开cmd,Linux打开终端,输入“tracert 目标主机”即可进行追踪,例如
tracert www.baidu.com
它具体是社么原理,可以使用Wireshark抓包工具进行抓包查看。例如我tracert了一个主机,抓包显示Tracert发送的数据包如下:
可以发现,tracert发送了多个包,包的TTL值从1开始不断+1,这里的TTL指的是数据包生存时间,为了防止数据包在网络上出现环路(数据包从路由器A发送到B,B发送给C,C发送给A......),每个数据包有个TTL(Time-to-live)属性,每经过一级路由器,TTL就会减去1,当TTL位0时,表示这个包经过了太多的路由器,可能出现了环路,这个包会被路由器丢弃,路由器会返回ICMP超时(Time-to-live exceeded)的信息。
tracert发送的第一个包TTL为1,经过了第一个路由器的时候,这个包的TTL就为0了,第一个路由器会把这个包丢弃,返回了ICMP错误,我们就知道了第一个途经路由器的IP
接着发送TTL为2的包,经过第二个路由器的时候,TTL为0,这样通过返回的错误消息,我们就知道了第二级路由器的IP。
但是在Tracert的数据包中,有这个样子的:
看到路由器并没有返沪Time-to-live exceeded的信息,这可能时路由器有保护机制,防止利用ICMP进行攻击,对于这种情况,我们就没有办法知道这一级路由器的IP了。在Tracert中是这么显示的: