1:traceroute命令原理
发送一份UDP数据报,将目的端口号设置为不可达端口号,第一次发送UDP数据报将TTL设置为一,当到达一个路由器的时候TTL减1,接受到此数据报的路由器丢弃该数据报,并且将回传一份ICMP报文,并且再次ICMP报文中就包含了IP地址,第一跳的路由器地址
2:利用tracerout进行路由查看
在使用tcpdump抓取ICMP差错报文的时候(由于TTL减少至0),不能用tcpdump -e host查看,因为这是指定的服务器,因为ICMP差错报文不一定是由什么服务器返回的,或者路由器,因此不能指定


上面可以看到ICMP超时报文,长度是36
3:利用traceout进行宽松的源站选路
源站选路是利用了IP数据报头部的选项部分
3.1code(0x83宽松的源站选路/0x89严格的源站选路)|len(代表长度)|ptr(代表指针,指向第一个路径)|IP地址(当数据报在源站的时候,首先将第一个IP地址去掉,他是最终的目的地址,将其移到最后面,其他的IP地址往左移一个IP地址长度,PTR指向第一个,值是4)
过程:当发送主机收到应用层发送的报文的时候,如果code是0x83,则为宽松的源站选路,第一个IP地址是最终的IP地址,将其移到最后,其他的IP地址往左面移动一个IP地址,此时PTR指向第一个位置,即原来的第二个IP地址,此时PTR的值为四,首先将此IP地址作为目的地址,进行路由,当找到此IP地址的路由器时,PTR进行加4,一直这样到最后的IP地址(最后的IP地址是原来发送主机的最终IP地址)
列如traceroute -g master slave
这样即可进行宽松的路由选择,路由路径应该经过master,和,最终目的是slave
3.2:利用traceroute进行严格的源站选路
traceroute -G netb -G gatewany westgate
最终目的是westgate,如果此种路由到不了,则必为失败的
3.2:利用traceroute进行往返路径的查看
SmileLion %traceroute -g netb Smilelion
蓝色字体为要到达的目的ip
貌似这样如果Smilelion是一个内网地址,就不行