traceroute
命令尝试跟踪IP
数据包到某个Internet
主机的路由,方法是使用一个小ttl
(生存时间)启动探测数据包,而后侦听来自网关的ICMP
超时回复,它以ttl
为1
开始探测,并将其增长1
,直到得到ICMP port unreachable
或TCP reset
,这意味着咱们到达了host
,或达到了最大值(默认为30
跳),在每一个ttl
设置处发送三个探测(默认),并打印一行,显示ttl
、网关地址和每一个探测的往返时间,在请求时,地址后面能够有附加信息,若是探测结果来自不一样的网关,则会打印每一个响应系统的地址,若是在5.0
秒内(默认值)没有响应,则会为该探测器打印一个*
。html
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] [-D] [-P proto] [--sport=port] [-M method] [-O mod_options] [--mtu] [--back] host [packet_len]
-4, -6
: 显式强制IPv4
或IPv6
跟踪路由,默认状况下,程序将尝试解析给定的名称,并自动选择适当的协议,若是解析主机名同时返回IPv4
和IPv6
地址,则traceroute
将使用IPv4
。-I, --icmp
: 使用ICMP ECHO
进行探测。-T, --tcp
: 使用TCP SYN
进行探测。-d, --debug
: 启用套接字级调试,若是内核支持的话。-F, --dont-fragment
: 不要对探测数据包进行分段,对于IPv4
它还会设置DF
位,该位告诉中间路由器也不要进行远程分段。经过packet_len
命令参数更改探测数据包的大小,能够手动获取有关单个网络跃点的MTU
的信息。从Linux
内核2.6.22
开始,非碎片化功能(例如-F
或--mtu
)才能正常工做,在该版本以前,IPv6
始终是零散的,IPv4
只能使用一次(从路由缓存中)发现的最终mtu
,它可能小于设备的实际mtu
。-f first_ttl, --first=first_ttl
: 指定要启动的TTL
,默认为1
。-g gate,..., --gateway=gate,...
: 告诉traceroute
向传出数据包添加IP
源路由选项,该选项告诉网络经过指定网关路由数据包(出于安全缘由,大多数路由器已禁用源路由),一般容许指定多个网关(以逗号分隔的列表)。对于IPv6
容许使用num
、addr
、addr
、...
的形式,其中num
是路由报头类型(默认为类型2
),注意,根据rfc 5095
,如今不同意使用0
型路由头。-i device, --interface=device
: 指定traceroute
应该经过其发送数据包的接口,缺省状况下,接口是根据路由表选择的。-m max_ttl, --max-hops=max_ttl
: 指定traceroute
探测的最大跳数(最大生存时间值),默认值为30
。-N squeries, --sim-queries=squeries
: 指定同时发送的探测报文数,同时发送多个探针能够大大提升跟踪路由的速度,默认值为16
,注意某些路由器和主机可使用ICMP
速率限制,在这种状况下,指定太大的数字可能会致使某些响应丢失。-n
: 在显示IP
地址时不要尝试将它们映射到主机名。-p port, --port=port
: 对于UDP
跟踪,指定traceroute
将使用的目的端口号,目标端口号将随每一个探针递增,对于ICMP
跟踪,指定初始ICMP
序列值(每一个探针也增长),对于TCP
和其余协议,仅指定要链接的(恒定)目标端口,使用tcptraceroute
包装程序时,-p
指定源端口。-t tos, --tos=tos
: 对于IPv4
,设置服务类型TOS
和优先级值,有用的值是16
低延迟和8
高吞吐量,要使用某些TOS
优先级值,必须是超级用户,对于IPv6
,设置流量控制值。-l flow_label, --flowlabel=flow_label
: 对IPv6
数据包使用指定的flow_label
。 -w MAX,HERE,NEAR, --wait=MAX,HERE,NEAR
: 设置等待探测响应的时间,以秒为单位,默认为5.0
。-q nqueries, --queries=nqueries
: 设置每一个跃点的探测数据包数,默认值为3
。-r
: 绕过常规路由表,并直接发送到链接的网络上的主机,若是主机不在直接链接的网络上,则返回错误,此选项可用于经过没有路由的接口对本地主机执行ping
操做。-s src_addr, --source=src_addr
: 选择一个备用源地址,请注意必须选择一个接口的地址,默认状况下使用传出接口的地址。-z sendwait, --sendwait=sendwait
: 探测之间的最小时间间隔,默认值为0
,若是该值大于10
,则以毫秒为单位指定一个数字,不然为秒数,也容许使用浮点值,当某些路由器对ICMP
消息使用速率限制时很是有用。-e, --extensions
: 显示ICMP
扩展名,通用格式为CLASS / TYPE
即后跟十六进制转储,所示的MPLS
多协议标签交换数据已解析,格式为MPLS:L=label,E=exp_use,S=stack_bottom,T=TTL (with any further objects separated by a slash ("/"))
。-A, --as-path-lookups
: 在路由注册表中执行AS
路径查找,并在相应地址后直接打印结果。-M name --module=name
: 使用指定的模块(内置或外部)用于traceroute
操做,大多数方法都有其快捷方式,例如-I
表示-M icmp
等。-O OPTS,..., --options=OPTS,...
: 将特定于模块的选项OPTS
用于traceroute
模块,容许几个OPTS
,以逗号分隔,例如若是OPTS
是help
,则打印帮助信息。--sport=num
: 将源端口号用于传出数据包,表示为-N 1
。--fwmark=num
: 为传出数据包设置防火墙标记。-U --udp
: 使用UDP
到特定端口进行路由,而不是每一个探针增长端口,默认端口为53
。-UL
: 使用UDP LITE
进行路由,默认目标端口为53
。-D --dccp
: 使用DCCP
请求进行路由,默认端口为33434
。-P prot --protocol=prot
: 使用协议保护的原始数据包进行路由。--mtu
: 沿着被追踪的路径发现MTU
,表示为-F-N 1
。--back
: 推断后向路径中的跳数,若是不一样则打印。-V
: 输出版本信息。--help
: 输出帮助信息。使用traceroute
查看路由信息。linux
traceroute www.google.com
指定IPv4
查看路由信息。git
traceroute -4 www.google.com
指定要启动的TTL
,默认为1
。github
traceroute -f 3 www.google.com
不将IP
地址解析为其域名。shell
traceroute -n www.google.com
设置每一个跃点的探测数,默认为3
。缓存
traceroute -q 1 www.google.com
指定完整的数据包长度,默认是60
字节的数据包。安全
traceroute www.google.com 100
设置要使用的目标端口,默认为33434
。网络
traceroute -p 20292 www.google.com
https://github.com/WindrunnerMax/EveryDay
https://www.computerhope.com/unix/utracero.htm https://www.runoob.com/linux/linux-comm-traceroute.html https://www.geeksforgeeks.org/traceroute-command-in-linux-with-examples/