通常,特定的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、说明