Linux基礎命令---traceroute追蹤路由
traceroute
traceroute 指令輸出到目標主機的路由包。Traceroute跟蹤從IP網路到給定主機的路由資料包。它利用IP協議的生存時間(TTL)欄位,並試圖在通往主機的路徑上從每個閘道器激發ICMP TIME_SUBERS響應。
traceroute6 等價於“ traceroute -6 ”
唯一需要的引數是目標主機的名稱或IP地址。探測資料包的總大小(IPv 4預設為60位元組,IPv 6為80位元組)是一個可選引數。在某些情況下,可以忽略指定的大小或將其增加到最小值。
該程式試圖跟蹤IP資料包將遵循的路由到某些Internet主機,方法是使用一個小的ttl(生命時間)啟動探測包,然後從閘道器偵聽ICMP“時間超過”的答覆。我們以1開頭,然後增加1,直到我們得到一個ICMP“埠不可達”(或TCP重置),這意味著我們到達了“主機”,或者達到了最大值(預設為30跳)。在每個ttl設定處傳送三個探針(預設情況下),並列印一行,顯示每個探針的ttl、閘道器地址和往返時間。在請求時,可以在地址之後新增其他資訊。如果探測答案來自不同的閘道器,則將列印每個響應系統的地址。如果在5.0秒(預設)內沒有響應,則會為該探針列印一個“*”(星號)。
追蹤結束後,可以列印一些附加註釋:!h、!n或!P(主機、網路或協議不可達)、!s(源路由失敗)、!F(所需碎片化)、!X(管理上禁止通訊)、!v(主機優先順序衝突)、!C(有效的優先截止),或!<num>(ICMP不可達程式碼<num>)。如果幾乎所有的探測器都導致某種無法到達的情況,Traceroute就會放棄並退出。
我們不希望目標主機處理UDP探測包,因此目標埠被設定為一個不太可能的值(您可以使用-p標誌更改它)。ICMP或TCP跟蹤不存在這樣的問題(對於TCP,我們使用半開放技術,這樣可以防止目標主機上的應用程式看到我們的探測)。
在現代網路環境下,由於防火牆的廣泛應用,傳統的traceroute方法並不總是適用的。這樣的防火牆過濾“不太可能”的UDP埠,甚至ICMP迴音。為了解決這個問題,還實現了一些額外的跟蹤方法
此命令的適用範圍:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。
2、 語法
traceroute [-46dFITUnreAV] [-f first_ttl] [-g gate,…] [-i device] [-m max_ttl] [-p port] [-s src_addr]
[-q nqueries] [-N squeries] [-t tos] [-l flow_label] [-w waittime] [-z sendwait]
[-UL] [-P proto] [--sport=port] [-M method] [-O mod_options] [--mtu] [--back] host [packet_len]
2 、選項列表
選項 |
說明 |
--help |
顯示幫助資訊 |
-V | --version |
顯示版本資訊 |
-4 | -6 |
顯式強制IPv4或IPv6跟蹤。預設情況下,程式將嘗試解析給定的名稱,並自動選擇適當的協議。如果解析主機名同時返回ipv4和ipv6地址,traceroute將使用ipv4。 |
-I |
使用ICMP進行路由探測 |
-T |
使用TCP協議的SYN進行路由探測 |
-d |
是能socket除錯功能 |
-f first_ttl |
指定第一個資料包的TTL,預設是1 |
-F |
不使用碎片 |
-g gateway |
告訴Traceroute將IP源路由選項新增到傳出資料包,該資料包通知網路通過指定閘道器路由資料包(大多數路由器出於安全原因禁用了源路由)。通常,允許多個閘道器(逗號分隔)。對於IPv 6,num,addr,addr.允許使用,其中num是路由標頭型別(預設為型別2)。注意,0型別的路由頭現在已不再推薦使用(Rfc 5095) |
-i interface |
指定網路介面 |
-m max_ttl |
指定最大ttl,預設30 |
-N squeries |
指定同時傳送的探測資料包的數量。同時傳送幾個探針可以大大加快示蹤速度。預設值為16。 |
-n |
使用ip地址,不使用hostname |
-p port |
指定UDP埠 |
-t tos |
對於IPv 4,設定服務型別(TOS)和優先順序值。有用的值是16(低延遲)和8(高吞吐量)。注意,為了使用一些TOS優先順序值,您必須是超級使用者。對於IPv 6,設定流量控制值。 |
-w waittime |
指定等待應答的時間,預設5s |
-q nqueries |
設定每個跳的探測資料包數。預設為3 |
-r |
忽略正常的路由表 |
-s |
指定傳送資料包的ip地址 |
-z |
探測之間的最小時間間隔(預設為0)。如果值大於10,則它指定一個以毫秒為單位的數字,否則為秒數(浮點值也允許)。當某些路由器對icmp訊息使用速率限制時非常有用。 |
-e |
顯示ICMP擴充套件(Rfc 4884)。一般形式是類/型別:後面是十六進位制轉儲。MPLS(Rfc 4950)以一種形式顯示出來“ MPLS:L=label,E=exp_use,S=stack_bottom,T=TTL ” |
-A |
在路由登錄檔中執行路徑查詢,並在相應地址之後直接列印結果。 |
高階選項 |
|
--sport= port |
選擇要使用的源埠 |
-M method |
對traceroute操作使用指定的方法。預設的傳統UDP方法有名稱Default,ICMP(-I)和TCP(-T)分別有ICMP和TCP。特定於方法的選項可以通過-O傳遞。 |
-O option |
指定一些特定於方法的選項。幾個選項用逗號分隔(或在cmdline上使用多個-O)。每種方法都可能有自己的特定選項,或者許多方法根本沒有它們 |
-U |
使用UDP對特定的目標埠進行跟蹤(而不是增加每個探針的埠)。預設埠為53(DNS) |
-UL |
使用UDPLITE追蹤 |
-P protocol |
使用指定協議的原始資料包進行跟蹤。預設協議為253(Rfc 3692)。 |
--mtu |
沿著被追蹤的路徑發現MTU |
--back |
列印後跳數時,它似乎與前進方向不同。在假定遠端跳傳送初始ttl設定為64、128或255(這似乎是一種常見的做法)的情況下,猜測了這個數字。它以“-NUM”的形式列印為否定值。 |
3 、可用的方法method
通常,特定的traceroute方法可能必須由-M名稱來選擇,但是大多數方法都有它們簡單的命令列開關(如果存在,您可以在方法名稱之後看到它們)。
method |
說明 |
default |
傳統的、古老的追蹤方法。預設使用。 探測包是具有所謂“不可能”目標埠的UDP資料包。第一個探針的“不可能”埠是33434,然後每個下一個探針的埠增加一個。由於預期埠未使用,目標主機通常返回“ICMP不可訪問埠”作為最終響應。(但是,沒有人知道當某些應用程式偵聽這樣的埠時會發生什麼)。 這個方法普通使用者就可以使用。 |
icmp -I |
目前最常用的方法是使用ICMP回波資料包作為探針。如果您可以ping(8)目標主機,則icmp跟蹤也適用。 |
tcp -T |
眾所周知的現代方法,旨在繞過防火牆。使用常量目標埠(預設為80,http)。 如果網路路徑中存在一些過濾器,那麼很可能任何“不太可能”的UDP埠(對於預設方法而言)或甚至ICMP回波(對於ICMP)都會被過濾,並且整個跟蹤只會在這樣的防火牆上停止。要繞過網路過濾器,我們必須只使用允許的協議/埠組合。如果我們追蹤一些,比如說,郵件伺服器,那麼更有可能“ -T –p 25 ”可以到達它,即使-我不能。 這種方法使用了眾所周知的“半開放技術”,它可以防止目標主機上的應用程式看到我們的探測。通常,傳送TCP syn。對於未被監聽的埠,我們接收TCP重置,一切都完成了。對於活動偵聽埠,我們接收TCP syn ack,但通過TCP重置(而不是預期的TCP ack)應答,這樣即使應用程式從未注意到,遠端TCP會話也會被刪除。 這個方法有以下的一些選項,預設的是 syn 、 sysctl syn,ack,fin,rst,psh,urg,ece,cwr ,在任意組合中為探測包設定指定的tcp標誌。 flags = num ,將TCP標頭中的標誌欄位設定為 num 。 ecn ,傳送帶有TCP標誌ECA和CWR的syn資料包(用於顯式擁塞通知,rfc 3168) sack,timestamps,window_scaling ,在傳出探測包中使用相應的tcp標頭選項。 sysctl ,對上面的TCP頭選項和 ecn 使用當前sysctl(“/proc/sys/net/*”)設定。預設情況下始終設定,如果沒有其他指定的話 mss = num ,對maxseg tcp報頭選項使用 num 值(當syn) |
tcpconn |
TCP 方法的初始實現,簡單使用CONNECT(2)呼叫,完成TCP會話的完全開啟 |
udp -U |
使用帶有常量目標埠的UDP資料包(預設為53,DNS)。也打算繞過防火牆。 注意,與TCP方法不同的是,目標主機上的相應應用程式總是接收我們的探測(帶有隨機資料),而且大多數都很容易被它們混淆。但是,大多數情況下,它不會響應我們的資料包,因此我們永遠不會看到跟蹤中的最後一跳。(幸運的是,似乎至少DNS伺服器會以憤怒的方式回覆)。 此方法不需要特權。 |
udplite -UL |
對探針使用udplite資料包(具有固定的目標埠,預設為53),此方法不需要特權。選項: coverage = num ,設定udplite範圍 num 。 |
raw -P proto |
傳送協議原始資料包。選項: protocol = proto ,使用IP協議Proto(預設253) |
4 、說明
為了加速工作,通常同時傳送幾個探測器。另一方面,它製造了一個“包裹風暴”,特別是在回覆方向。路由器可以節流ICMP響應的速率,有些應答可能會丟失。為了避免這種情況,減少同步探測的數量,甚至將其設定為1(類似於最初的traceroute實現),即-N1。
最終(目標)主機可以丟棄一些同時進行的探測,甚至可能只回答最新的探測。它可以導致額外的“看上去像過期”啤酒花接近最後一跳。我們使用智慧演算法來自動檢測這種情況,但如果在您的情況下它無法幫助,只需使用-N1。
為了獲得更好的穩定性,您可以通過-z選項來減緩程式的工作速度,例如,在探測之間使用“ -z 0.5 ”進行半秒暫停。
如果有些跳對每種方法都沒有任何報告,那麼獲得某些資訊的最後機會是使用“ ping -R ”命令(ipv4,並且僅對最近的8跳)。
5 、例項
追蹤到baidu的路由資訊
|
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29270124/viewspace-2611837/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Linux基礎命令---tracepath追蹤路由Linux路由
- Linux基礎命令---IP路由操作Linux路由
- Linux基礎命令---顯示路由表routeLinux路由
- 如何做路由追蹤?【免工具】路由
- Linux基礎命令Linux
- linux 命令 基礎Linux
- Linux常用基礎命令Linux
- Linux 常用基礎命令Linux
- Linux基礎命令---mysqlLinuxMySql
- Linux基礎命令---uptimeLinux
- Linux基礎命令--slabtopLinux
- Linux基礎命令---apachectlLinuxApache
- Linux基礎命令---ftpLinuxFTP
- Linux基礎命令—mkswapLinux
- Linux基礎命令---mknodLinux
- Linux基礎命令---mkfsLinux
- Linux基礎命令---mktempLinux
- Linux基礎命令---sudoLinux
- Linux基礎命令---yesLinux
- Linux基礎命令---shutdownLinux
- Linux基礎命令---serviceLinux
- Linux基礎命令—sudoLinux
- Linux基礎命令—calLinux
- Linux基礎命令—dateLinux
- Linux基礎命令—lastLinuxAST
- Linux基礎命令---dateLinux
- Linux基礎命令---lastLinuxAST
- Linux基礎命令---lsusbLinux
- Linux基礎命令---lspciLinux
- Linux基礎命令---hwclockLinux
- Linux基礎命令---ejectLinux
- Linux基礎命令---archLinux
- Linux基礎命令---duLinux
- Linux基礎命令---dfLinux
- Linux基礎命令---bcLinux
- Linux基礎命令---calLinux
- Linux基礎命令---chkconfigLinux
- Linux基礎命令—lsusbLinux