traceroute指令输出到目标主机的路由包。Traceroute跟踪从IP网络到给定主机的路由数据包。它利用IP协议的生存时间(TTL)字段,并试图在通往主机的路径上从每个网关激发ICMPTIME_SUBERS响应。
唯一需要的参数是目标主机的名称或IP地址。探测数据包的总大小(IPv4默认为60字节,IPv6为80字节)是一个可选参数。在某些情况下,可以忽略指定的大小或将其增加到最小值。
该程序试图跟踪IP数据包将遵循的路由到某些主机,方法是使用一个小的ttl(生命时间)启动探测包,然后从网关侦听ICMP“时间超过”的答复。我们以1开头,然后增加
1,直到我们得到一个ICMP“端口不可达”(或TCP重置),这意味着我们到达了“主机”,或者达到了最大值(默认为30跳)。在每个ttl设置处发送三个探针(默认情况下),并打印一行,显示每个探针的ttl、网关地址和往返时间。在请求时,可以在地址之后添加其他信息。如果探测答案来自不同的网关,则将打印每个响应系统的地址。如果在5.0秒(默认)内没有响应,则会为该探针打印一个“*”(星号)。
追踪结束后,可以打印一些附加注释:!h、!n或!P(主机、网络或协议不可达)、!s(源路由失败)、!F(所需碎片化)、!X(管理上禁止通信)、!v(主机优先级冲突)、!C(有效的优先截止),或!(ICMP不可达代码)。如果几乎所有的探测器都导致某种无法到达的情况,Traceroute就会放弃并退出。
我们不希望目标主机处理UDP探测包,因此目标端口被设置为一个不太可能的值(您可以使用-p标志更改它)。ICMP或TCP跟踪不存在这样的问题(对于TCP,我们使用半开放技术,这样可以防止目标主机上的应用程序看到我们的探测)。
在现代网络环境下,由于防火墙的广泛应用,传统的traceroute方法并不总是适用的。这样的防火墙过滤“不太可能”的UDP端口,甚至ICMP回音。为了解决这个问题,还实现了一些额外的跟踪方法
此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。
traceroute[-46dFITUnreAV][-ffirst_ttl][-ggate,…][-idevice][-mmax_ttl][-pport][-ssrc_addr]
[-qnqueries][-Nsqueries][-ttos][-lflow_label][-wwaittime][-zsendwait]
[-UL][-Pproto][--sport=port][-Mmethod][-Omod_options][--mtu][--back]host[packet_len]
显式强制IPv4或IPv6跟踪。默认情况下,程序将尝试解析给定的名称,并自动选择适当的协议。如果解析主机名同时返回ipv4和ipv6地址,traceroute将使用ipv4。
告诉Traceroute将IP源路由选项添加到传出数据包,该数据包通知网络通过指定网关路由数据包(大多数路由器出于安全原因禁用了源路由)。通常,允许多个网关(逗号分隔)。对于IPv6,num,addr,addr.允许使用,其中num是路由标头类型(默认为类型2)。注意,0类型的路由头现在已不再推荐使用(Rfc5095)
对于IPv4,设置服务类型(TOS)和优先级值。有用的值是16(低延迟)和8(高吞吐量)。注意,为了使用一些TOS优先级值,您必须是超级用户。对于IPv6,设置流量控制值。
探测之间的最小时间间隔(默认为0)。如果值大于10,则它指定一个以毫秒为单位的数字,否则为秒数(浮点值也允许)。当某些路由器对icmp消息使用速率限制时非常有用。
显示ICMP扩展(Rfc4884)。一般形式是类/类型:后面是十六进制转储。MPLS(Rfc4950)以一种形式显示出来“MPLS:L=label,E=exp_use,S=stack_bottom,T=TTL”
对traceroute操作使用指定的方法。默认的传统UDP方法有名称Default,ICMP(-I)和TCP(-T)分别有ICMP和TCP。特定于方法的选项可以通过-O传递。
指定一些特定于方法的选项。几个选项用逗号分隔(或在cmdline上使用多个-O)。每种方法都可能有自己的特定选项,或者许多方法根本没有它们
使用UDP对特定的目标端口进行跟踪(而不是增加每个探针的端口)。默认端口为53(DNS)
打印后跳数时,它似乎与前进方向不同。在假定远程跳发送初始ttl设置为64、128或255(这似乎是一种常见的做法)的情况下,猜测了这个数字。它以“-NUM”的形式打印为否定值。
通常,特定的traceroute方法可能必须由-M名称来选择,但是大多数方法都有它们简单的命令行开关(如果存在,您可以在方法名称之后看到它们)。
探测包是具有所谓“不可能”目标端口的UDP数据报。第一个探针的“不可能”端口是33434,然后每个下一个探针的端口增加一个。由于预期端口未使用,目标主机通常返回“ICMP不可访问端口”作为最终响应。(但是,没有人知道当某些应用程序侦听这样的端口时会发生什么)。
目前最常用的方法是使用ICMP回波数据包作为探针。如果您可以ping
(8)目标主机,则icmp跟踪也适用。
众所周知的现代方法,旨在绕过防火墙。使用常量目标端口(默认为80,,发送带有TCP标志ECA和CWR的syn数据包(用于显式拥塞通知,rfc3168)
sack,timestamps,window_scaling,在传出探测包中使用相应的tcp标头选项。
sysctl,对上面的TCP头选项和使用当前sysctl(“/proc//*”)设置。默认情况下始终设置,如果没有其他指定的话
注意,与TCP方法不同的是,目标主机上的相应应用程序总是接收我们的探测(带有随机数据),而且大多数都很容易被它们混淆。但是,大多数情况下,它不会响应我们的数据包,因此我们永远不会看到跟踪中的最后一跳。(幸运的是,似乎至少DNS服务器会以愤怒的方式回复)。
对探针使用udplite数据报(具有固定的目标端口,默认为53),此方法不需要特权。选项:
为了加速工作,通常同时发送几个探测器。另一方面,它制造了一个“包裹风暴”,特别是在回复方向。路由器可以节流ICMP响应的速率,有些应答可能会丢失。为了避免这种情况,减少同步探测的数量,甚至将其设置为1(类似于最初的traceroute实现),即-N1。
最终(目标)主机可以丢弃一些同时进行的探测,甚至可能只回答最新的探测。它可以导致额外的“看上去像过期”啤酒花接近最后一跳。我们使用智能算法来自动检测这种情况,但如果在您的情况下它无法帮助,只需使用-N1。
为了获得更好的稳定性,您可以通过-z选项来减缓程序的工作速度,例如,在探测之间使用“-z0.5”进行半秒暂停。
如果有些跳对每种方法都没有任何报告,那么获得某些信息的最后机会是使用“ping-R”命令(ipv4,并且仅对最近的8跳)。
tracerouteto(111.13.100.92),30hopsmax,60bytepackets
4221.180.30.19712.792ms221.180.30.4512.776ms12.762ms
8111.13.98.10120.569ms20.460ms111.13.98.9324.463ms
9111.13.98.9327.215ms111.13.98.10120.895ms111.13.112.5326.946ms
10111.13.108.524.136ms111.13.112.5723.754ms111.13.112.6123.712ms
1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。