武漢網(wǎng)站設(shè)計(jì)站建設(shè)seo課程
文章中有截圖,看不清的話,可以把瀏覽器顯示比例放大到200%后觀看。
linux下traceroute的原理
本文通過抓包觀察一下linux下traceroute的原理
環(huán)境:一臺嵌入式linux設(shè)備,內(nèi)網(wǎng)ip是192.168.186.195,其上有192.168.202.1的ip地址。網(wǎng)關(guān)是192.168.186.1。外部公網(wǎng)ip一個烏班圖設(shè)備,ip是221.5.87.66。在嵌入式上抓包,然后傳出觀察。
過程:
crt上運(yùn)行tftp服務(wù)器。
cmd下驗(yàn)證
C:\Windows\System32>netstat? -ano? | findstr ?:69? 查看udp69端口是否打開?
? UDP??? 0.0.0.0:69???????????? *:*???????????????????? ?27556(得到進(jìn)程號是27556)
? UDP?? ?[::]:69??????????????? *:*????????????????????? 27556
C:\Windows\System32>tasklist? | findstr ?27556? 根據(jù)進(jìn)程號查程序名
SecureCRT.exe??? ?27556 Console? ????1???? 62,852 K
確定已經(jīng)打開,文件保存目錄事先已經(jīng)設(shè)定好C:\Users\zy041\Desktop\seccrt\tftp\log。
已知設(shè)備的eth0口上聯(lián)口192.168.186.195,gw是192.168.186.1
抓包~ # tcpdump? -i eth0? -w ?trace2.pcap?? host? 221.5.87.66? or?? icmp
tcpdump: WARNING: eth0: no IPv4 address assigned
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
另起一個ssh,執(zhí)行traceroute
/mnt/userspace # traceroute? -w 1 ?-d? 221.5.87.66? -w 1是超時等待時間是1秒,-d是不進(jìn)行dns解析,這樣可以提高回顯時間。
traceroute to 221.5.87.66 (221.5.87.66), 30 hops max, 38 byte packets
?1? 192.168.186.1 (192.168.186.1)? 0.464 ms? 0.293 ms? 0.348 ms
?2? bogon (10.110.1.1)? 1.224 ms? 0.913 ms? 0.957 ms
?3? 10.0.64.1 (10.0.64.1)? 5.988 ms? 3.577 ms? 3.588 ms
?4? 123.139.2.33 (123.139.2.33)? 3.980 ms? 3.946 ms? 3.903 ms
?5? *? *? 221.11.0.2 (221.11.0.2)? 4.460 ms
?6? 221.11.0.153 (221.11.0.153)? 6.493 ms? *? *
?7? *? *? *
?8? 112.96.0.198 (112.96.0.198)? 44.014 ms? 43.995 ms? 43.515 ms
?9? 120.80.209.146 (120.80.209.146)? 40.623 ms? 40.636 ms? 40.358 ms
10? 221.5.87.66 (221.5.87.66)? 40.255 ms? 39.971 ms? 39.960 ms
如圖,經(jīng)過10次到達(dá)目的ip221.5.87.66。
停止抓包
~ # tcpdump? -i eth0? -w? trace2.pcap?? host? 221.5.87.66? or?? icmp
tcpdump: WARNING: eth0: no IPv4 address assigned
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
^C60 packets captured?? ctrl+c結(jié)束抓包
60 packets received by filter
0 packets dropped by kernel
~ # tftp? -pl? trace2.pcap? 192.168.186.118? 傳出文件
trace2.pcap????????? 100% |***************************************************************|? 5515?? 0:00:00 ETA
打開觀察:
同一ip發(fā)來的ttl exceeded三次,判斷可能這個ip收到ttl=1的udp包三次,所以wireshark里添加ttl項(xiàng)
找到ip層的ttl項(xiàng),增加為列
可以看到,ttl為1-10的包,每個ttl取值發(fā)了三次,udp的目的端口每發(fā)一次+1,因?yàn)閠tl exceeded消息,回攜帶部分收到的ttl=1的包,因?yàn)榘l(fā)的是udp消息,所以ip層的ttl=1,而這個ttl exceeed消息因?yàn)樵O(shè)備不同,ttl原始值有的是255,有的是128,有的是64,所以經(jīng)過對應(yīng)節(jié)點(diǎn)后,減1后取值不同。
看最后,ttl=10時,到達(dá)目的ip,由目的ip 221.5.87.66發(fā)出目的端口不可達(dá)(目的端口未打開這個端口),所以源設(shè)備收到目的設(shè)備ip發(fā)出目的端口不可達(dá)認(rèn)為已經(jīng)到達(dá)對方設(shè)備,停止發(fā)出udp包。
由此,traceroute的原理是發(fā)出udp包,ttl從1開始,每個ttl值發(fā)三次,udp的目的端口有一個基礎(chǔ)值,每發(fā)一包,端口+1,記錄ttl exceed消息的ip為經(jīng)過節(jié)點(diǎn)ip,在收到目的發(fā)出目的端口不可達(dá)消息后,認(rèn)為到達(dá)目的設(shè)備,停止命令。