1. 程式人生 > >Linux基礎命令---traceroute追蹤路由

Linux基礎命令---traceroute追蹤路由

列表 suse 大小 系統 mtu 目前 cell 混淆 prot

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]

3、選項列表

選項

說明

--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”的形式打印為否定值。

4、可用的方法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會話也會被刪除。

這個方法有以下的一些選項,默認的是synsysctl

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)

5、說明

為了加速工作,通常同時發送幾個探測器。另一方面,它制造了一個“包裹風暴”,特別是在回復方向。路由器可以節流ICMP響應的速率,有些應答可能會丟失。為了避免這種情況,減少同步探測的數量,甚至將其設置為1(類似於最初的traceroute實現),即-N1。

最終(目標)主機可以丟棄一些同時進行的探測,甚至可能只回答最新的探測。它可以導致額外的“看上去像過期”啤酒花接近最後一跳。我們使用智能算法來自動檢測這種情況,但如果在您的情況下它無法幫助,只需使用-N1。

為了獲得更好的穩定性,您可以通過-z選項來減緩程序的工作速度,例如,在探測之間使用“-z 0.5”進行半秒暫停。

如果有些跳對每種方法都沒有任何報告,那麽獲得某些信息的最後機會是使用“ping -R”命令(ipv4,並且僅對最近的8跳)。

6、實例

追蹤到baidu的路由信息

[root@localhost ~]# ping www.baidu.com -c 1 //ping目標,得到ip地址

PING www.a.shifen.com (111.13.100.91) 56(84) bytes of data.

[root@localhost ~]# traceroute -n www.baidu.com //追蹤路由

traceroute to www.baidu.com (111.13.100.92), 30 hops max, 60 byte packets

1 192.168.1.1 4.124 ms 3.936 ms 3.882 ms

2 10.46.80.1 8.917 ms 9.238 ms 9.233 ms

3 183.203.226.201 12.855 ms 12.788 ms 12.802 ms

4 221.180.30.197 12.792 ms 221.180.30.45 12.776 ms 12.762 ms

5 221.183.47.225 13.526 ms 13.363 ms 13.259 ms

6 221.183.37.249 26.798 ms 23.556 ms 26.832 ms

7 * * *

8 111.13.98.101 20.569 ms 20.460 ms 111.13.98.93 24.463 ms

9 111.13.98.93 27.215 ms 111.13.98.101 20.895 ms 111.13.112.53 26.946 ms

10 111.13.108.5 24.136 ms 111.13.112.57 23.754 ms 111.13.112.61 23.712 ms

Linux基礎命令---traceroute追蹤路由