Chinaunix首页 | 论坛 | 博客
  • 博客访问: 829240
  • 博文数量: 157
  • 博客积分: 542
  • 博客等级: 中士
  • 技术积分: 1696
  • 用 户 组: 普通用户
  • 注册时间: 2011-11-21 20:21
文章分类
文章存档

2017年(1)

2016年(2)

2015年(6)

2014年(42)

2013年(77)

2012年(19)

2011年(10)

分类: 网络与安全

2013-03-26 17:19:47

当我们不能通过网络访问目的设备时,网络管理员就需要判断是哪里出了问题。问题不仅仅会出现在最终目的设备,也可能出现在转发数据包的中间路由器。
有3种方式用来探测一个数据包从源点到目的地经过了哪些中转路由器,这3种方式分别是:基于记录路由选项的路由探测,基于UDP协议的路由探测,基于ICMP Echo Request的路由探测。三种方式都可以用来探测一个数据包到达目的设备经过了哪些中间路由器,但实现的过程却截然不同。
注意:理解这些探测方法的关键要领是了解IP数据报和ICMP数据报的格式。IP数据报由两部分组成,分别是IP头部和IP数据部分,IP头部中包含了本文需要用到的TTL字段选项字段。IP数据部分中即可以包含UDP数据包,也可以包含ICMP数据包

1、基于Record route options(记录路由选项)的路由探测这种方式是我们最容易理解的探测路由方式。比如,我想知道一封从上海发出,目的地是北京的信,中间经过了多少个邮局转发。这个过程很简单,只要中间邮局在转发的信件扣上他们自己的邮戳,这封信到达目的地北京后,北京再把这封信回邮给我,当我收到回信后,只要看信上的邮戳,便知道中间经过哪些邮局。
ping -R(大写) 命令便可实现这种记录中间路由的功能,返回的结果是中间路由器的IP地址。
1) ping命令发出的是类型为8的ICMP数据报,当使用ping -R时,这个类型为8的ICMP数据报被装在一个IP数据报里,IP数据报的Options(选项)字段预留出给中间路由器扣戳的地方,这个地方不太大,只能容纳9台中转路由器的IP地址。
2) 当这个数据报被发送端送出后,每经过一个中转路由器,中转路由器的IP软件便会在此IP数据报的选项字段中加入一条这个中转路由器的IP地址。
3) 当这个数据包到达目的地时(如,),目的设备便会生成一条类型为0的ICMP数据报,这个ICMP数据报被封装在一个新的IP数据报里,新IP数据报的Options字段中拷贝了刚才收到的IP数据报中的Options字段。
4) 当这个新IP数据报回送到源发送端时,您便会在屏幕上看见一些中间路由器的IP地址了。

2、基于UDP协议的路由探测若想知道自己的电脑到经过了多少个路由器,可在命令行下输入traceroute进行探测(traceroute是Linux下的命令行工具),返回结果也许会与ping-R相同,但它是以另一种方式实现的。这种方式并没有像Record routeoptions探测技术中使用IP协议包的Options字段,而是利用了IP协议包中的TTL字段。
基本思路是这样的:这台服务器即卖茄子(提供HTTP服务),也卖黄瓜(提供FTP服务),但不卖土豆(未监听的UDP端口)。有位买家,为了知道一封信到达蔬菜供应商中间需要经过几个邮局(路由器),于是写信给询问土豆的价格。
第一步,买家在信封的TTL位置写上数字1,当这封信到达与自己相邻的第一个邮局时,邮局的人把TTL值减1,于是TTL为0,邮局章程规定,把TTL值为0的信丢到垃圾桶里,然后给买家发一封名曰超时的信,信上写了丢信邮局的名字,以告诉买家信被谁丢掉了。
第二步,买家在信封的TTL位置写上数字2,当这封信到达与自己相邻的第一个邮局时,邮局的人把TTL值减1,现在TTL值为1,邮局章程规定,TTL值不为0的数据报需要继续转发给下一个邮局,于是这封信又被转发到了下一个邮局。当下一个邮局收到这封信时,邮局的人把TTL值减1,于是TTL为0,邮局章程规定,把TTL值为0的信丢到垃圾桶里,然后给买家发一封名曰超时的信,信上写了丢信邮局的名字,以告诉买家信被谁丢掉了。
通过第一步,买家知道了第一个中转路由器。通过第二步,买家知道了第二个中转路由器。那么买家只需要不断的把TTL值加1,便可根据如上步骤探测出中间经过了哪些路由器。
第三步,我们假设中间只经过两个邮局信便到达目的地了。接着第二步,买家选在把TTL值设置为3,当这封信到达与自己相邻的第一个邮局时,邮局的人把TTL值减1,现在TTL值为2,邮局章程规定,TTL值不为0的数据报需要继续转发给下一个邮局,于是这封信又被转发到了下一个邮局。当下一个邮局收到这封信时,邮局的人把TTL值减1,于是TTL为1,邮局章程规定,TTL值不为0的数据报需要继续转发给下一个邮局,于是这封信又被转发到了下一个邮局,但下一个邮局已经就是最终目的地了,尽管把TTL减1的结果为0,但却不会丢弃它,因为目的地就是呀!于是把这个IP层邮递员送来的信交付给负责卖土豆人,但我们开始说了,并不卖土豆,于是就回送一个名曰终点不可达(ICMP类型为3,代码为3)的信给买家。
第四步,当买家收到类型为终点不可达的信时,就不再把那封问土豆价格的信上的TTL加1了,因为他已经知道了到达目的地的全部路由。
具体实现过程可以用下面两幅图来理解


我们假设在linux下执行如下指令:
$traceroute 
1. 11.11.11.11 0.888ms 0.777ms 0.666ms
2. 22.22.22.22 0.999ms 0.888ms 0.777ms
3. 33.33.33.33 1.111ms 0.999ms 0.888ms
从本地到达(IP地址是33.33.33.33)中间经过了两台路由器:11.11.11.11和22.22.22.22。IP地址后面的3个时间是本地机器到达这个路由器的3次往返时间。为何要对同一个中转的路由器探测3次往返时间呢?这主要是为了给用户一个平均值。通常第一个往返时间比其他两个要短,因为第一次往返时间计算时,需要找出下一跳路由器IP所对应的MAC地址,第二次和第三次往返时间,MAC地址可以直接从ARP高速缓存表中提取。

3、基于ICMP Echo Request的路由探测这种探测方式与基于UDP协议路由探测的实现步骤一样,但发送端送出的不是一个UDP数据包,而发送的是一个ICMP类型为8的EchoRequest(回显请求)数据报文,具体命令是tracert(tracert是Windows系统的命令行工具)。与基于UDP协议的路由探测技术一样,每次发送端都会把TTL值加1,每个中转路由器都对TTL值减1,如果为0,便丢弃后给发送端发送一个超时报文,若不为0,则继续转发给下一跳。唯一不同的是,当这个数据报到达最终目的节点时,由于发送端发送的是EchoRequest报文,所以接收端就会相应一个ICMP类型为0的数据报文。这样,当发送端收到ICMP类型为0的数据报文时,就知道了全部路由已经查询完毕,终止继续探测。

其他

pathping
pathping是tracert和ping的混合体。命令行下输入pathping ,返回两部分内容,第一部分显示到达目的地经过了哪些路由,第二部分显示了路径中每个路由器上数据包丢失方面的信息。
图形化路由跟踪
您可以点这里访问,这个网站以地图的方式显示出您与目的节点的通信路径。
图形化的路由跟踪是tracert、IP经纬度数据库、GoogleMap三者的混合体。首先,当您在yougetsignal.com上输入目的地址时,yougetsignal.com服务器会采用如上3种之一的路由追踪过程。然后,对返回的IP地址进行数据库查找,数据库中列出了IP地址所对应的经纬度。最后,把经纬度标注到Google Map上。

探测位于防火墙后的路由

黑客入侵的前奏是踩点,踩点最关键的步骤就是画出目标网络拓扑图……

通常WEB服务器对于Internet来说是安全的,它们位于防火墙之后。

上图可以发现,WEB服务器一般位于防火墙后面,防火墙策略阻止了入网的UDP和ICMP协议流通过,那么使用常规的探测软件得出到达WEB服务器的路由就不现实了,因为Windwos下的tracert基于ICMP Echo Requests(Linux下的traceroute基于UDP)。
WEB服务器基于HTTP协议,HTTP协议基于TCP协议,那么,能不能把数据包封装在TCP报文里进行探测呢?paratrace就是这样一款软件,他像tracert一样,每次发出去TCP数据包的IP报头中ttl值加1,接收设备对ttl值减1后并回复ICMP超时报文。因为防火墙并没有阻止TCP协议和ICMP超时报文的流通,paratrace可以顺利的得到企业内的网络拓扑。
防范办法很简单,就是防火墙策略彻底删除企业内网回送到外网的ICMP超时报文(类型11)。
阅读(2910) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~