探究路由探测工具

2020-04-20 11:25:50湖北枝江市职业教育中心杨华杜国金
网络安全和信息化 2020年3期
关键词:源地址路由器命令

■湖北枝江市职业教育中心 杨华 杜国金

根据平时的工作实践挖掘以下几种工具的路由探测功能。

目的路由跟踪工具【Traceroute与Tracert】

Traceroute 是Linux 和Mac OS 等系统默认提供的路由追踪小程序,Tracert 是Windows系统默认提供的路由追踪小程序。二者的功能相同,都能探测数据包从源地址到目的地址经过的路由器的IP 地址。Traceroute/Tracert 的实现都借助了TTL:通过向目的地址发送一系列的探测包,设置探测包的TTL 初始值分别为1,2,3…,根据返回的超时通知(ICMP Time Exceeded Message)得到源地址与目的地址之间的每一跳路由信息。虽然两者输出结果一致,但在实现原理上还有着显著的差别。

图1 端口不可达路由跟踪

Traceroute 借助UDP 协议,Tracert 借助ICMP 协议。

1.Traceroute 实现原理

Traceroute 使用UDP 包进行探测,目标端口号默认为33434,每次探测目标端口号加1。Traceroute 故意使用了一个大于 30000(因UDP 协议规定端口号必须小于30000,所以目标主机收到数据包后唯一能做的事就是返回一个“端口不可达”的ICMP 报文)的目标端口号,以保证目标地址收到数据包后能够返回一个“端口不可达”的ICMP 报文,于是源地址就可将端口不可达报文当作跟踪结束的标志,这是巧妙运用了UDP协议的本身特征达到探测路由的目的(如图1 所示)。

但有时Traceroute 并不能到达目的地,当TTL 增加到一定大小之后就一直拿不到返回的数据包了,主要是因为安全问题,在运营商的路由器上,对UDP 与ICMP 的数据包处理非常谨慎,两者待遇大不一样。

为了利于故障排除,ICMP ECHO Request/Reply 是不会封的,而UDP 则不同。UDP 常被用来做网络攻击,因为UDP 无需连接,因而没有任何状态约束它,比较方便攻击者伪造源IP、伪造目的端口发送任意多的UDP 包。

所以运营商为安全考虑,对于UDP 端口常常采用白名单ACL,就是只有ACL 允许的端口才可以通过,没有明确允许的则统统丢弃,比如允许DNS/DHCP/SNMP 等。

其实这个时候数据包已经到达目标服务器了,但是因为安全问题大部分的应用服务器都不提供UDP 服务(或者被防火墙挡掉),所以我们拿不到服务器的任何返回,程序就理所当然的认为还没有结束,一直尝试增加数据包的TTL。

目前许多开源iOS Traceroute 实现大多都是基于UDP 的方案,实际用起来并不能达到想要的效果,所以我们需要采用另一种方案来实现。

图2 Traceroute 和Tracert 两者对比

图3 ICMP 协议数据包路由选项

2.Tracert 实现原理

Tracert 使用ICMP 请求回显(ICMP Echo Request)数据包进行探测,每跳默认发送3 个探测包,在未能到达路由器或未返回ICMP 超时通知的情况下,相应的延时位置会以“*”显示。每个探测包都有唯一的标识号,ICMP 数据包使用Seq 进行标识。源地址以目的地址返回的ICMP 回应答复(ICMP Echo Reply)作为跟踪结束标志,这比Traceroute 采用“端口不可达”作为结束标志可靠多了。两者对比如图2所示。

除了以上专业的路由跟踪工具,在其它的网络命令中也有此功能的体现,如Ping 和Pathing 命令。

源路由跟踪工具【Ping】

命令格式:Ping-r count Record route for count hops.

在“记录路由”字段中记录传出和返回数据包的路由。尽管Ping 工具也可以进行侦测,但是因为IP 头的限制,Ping 不能完全的记录下所经过的路由器,因为“记录路由”字段最大值是40 字节,而每个IP 要占有4 个字节,另外加三个点分符,每个IP 占用bit 位4*83=35;40*8/35=9(取整),所有最多只记录9 条路由记录。

1.Ping-实验抓包分析

看一下发出的请求包:在发出的ICMP 包中的IP 头中使用了0x07 的源地址路由选项(如图3 所示),说明ICMP 的路由是根据返回包的记录的源地址选项来实现路由记录的,从返回的包中的路由记录中可以看出和显示的路由信息完全一致。

但是我们知道,通过源路由选项我们得出的结果是从222.42.254.182 返回我们主机的包,其记录的路由实际上是Router3 到PC0 的路由,而不是PC0 到Router3 的路由,这就有差别了。

2.Tracer-实验抓包分析

图4 网络拓扑-接口

Tracert 则是通过递增TTL 来实现的路由检测,那么他是一个标准的由我们的主机到Router3 的路由。

一个回路,一个去路,我们想像一下,如果可以结合这两个命令绘制完整的网络路由接口图,如图4 所示,我们只知道目标Router3 的IP,确可以得到完整的网络路由接口图,这对于网络故障的排查是大有帮助的。

遗憾的是,由于本身ICMP 协议包大小的限制,有时略显不足。

(1)由于ICMP 协议包最多只能保留9 条路由记录,所以超过9 条就无能无力了。

(2)由于一个是回路,一个是去路,因此可能选择的路由路径是不一致的,即使是一致的,也会产生不同的结果。为什么呢?因为路由都是多接口的,从一个接口收到包以后,转发到另一个接口上,由于Ping 方式获取的是包返回的路由,所以记录的都是这个路由的返回时候收到包的接口,而TTL 递增方式则是记录的发送包的时候收到的路由接口地址。

(3)对于Ping,发送的是一个echo request 包,ICMP type=8,code=0,当被Ping 者接到相关ICMP 包的时候,返回ICMP type=0,code=0 的响应包。

而对于 Tracert,包发出去后,途经的每个站点都会返回一个 ICMP type=11,code=0(表示传输中TTL=0)的包回去,只有到了终点,才会返回一个 ICMP type=3,code=3。

因此,Ping 和Tracert虽然原理上都是利用ICMP包,但使用的ICMP 类型不一样,所以可能会出现Ping通,但Tracert 不通的情况,反之亦然。

【小技巧】如果到达目网络的路由设备不超过4 个,可以直接通过Ping-r-9 来进行跟踪,因为去的数据包一去一回刚好把来去的路由接口记录下来,这样整个详细的网络拓扑就出来了,如下面命令所示:

正在Ping 222.42.254.182 具有32 字节的数据:

路由跟踪分析工具【PathPing】

图5 运行结果

PathPing 命令是一个路由跟踪分析工具,它将Ping和Tracert 命令的功能与这两个工具所不提供的其他信息结合起来,综合了二者的功能。PathPing 会先显示中间的通过的路由器(类似Tracert 命令得到的信息),然后分别对每个中间路由器(节点)发送一定数量的Ping包,通过统计它们对Ping 包响应的数据包来分析通信质量。

1.PathPing-实验抓包分析

正在计算统计信息,已耗时 100 秒...

指向此处的源此节点/链接

如图5 所示命令,运行结果反映出数据包从源主机到目标主机所经过的路径、网络延时以及丢包率,显示在任何特定路由器或链接处的数据包的丢失程度,可据此确定存在网络问题的路由器或子网,帮助我们解决网络问题。

2.特别注意

(1)这种方式可能要花费一定的时间成本,它每次给中间节点发送的Ping 包可能数量很大(根据笔者抓包显示达到了上千个),如果中间节点又很多,那结果可想而知,所以要有足够的耐心等待了。

(2)如果路由器对Ping关闭了响应,那么该节点的丢包率会达到100%,所以这种一般就是关闭了Ping 回复。

(3)对Ping 包丢弃程度只是节点本身对Ping 的处理,并不一定影响他的通信,你可以看到,关闭Ping 回复命令节点的下一个节点返回到数据是正常的,说明回复的包都成功发送回来。

猜你喜欢
源地址路由器命令
买千兆路由器看接口参数
科教新报(2022年24期)2022-07-08 02:54:21
国内互联网真实源地址验证研究进展①
只听主人的命令
移防命令下达后
这是人民的命令
你所不知道的WIFI路由器使用方法?
实现RSF机制的分布式域间源地址验证
网络安全策略中防火墙技术的应用
天融信防火墙的双线路路由和VPN设置
蓝色命令