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是一個內網地址,就不行