更新记录:
1.2010.4.26
增加非中文环境下的判断,在非中文的环境下,将使用免费的英文地址库GEOIP.dat.
2.2006.11.1
增加-L选项,用于列出网卡详细信息和编号。
阅读本文前,作者已假定你完全了解Tracert的相关实现原理,并对ICMP TTL TIME-EXCEEDED报文返回
的内容和结构以及产生该报文的原因有清晰的认识。如果你还未了解这方面的原理知识,请先Google之。
如果你有足够的耐心,请认真阅读完本文。相信对你肯定有所帮助。
一、基本介绍
X-FireWalk v3.3
***********************************************************
ACL Scanner|Super Tracerter For Windows
E-mail : crackersoftware@163.com Code By Xtiger 2005.5
HomePage: http://www.xdoors.net All For Free Live Dream...
***********************************************************
[Usage :]
x-firewalk.exe <ip|hostname through GetWay> [option]
[Options:]
-n not Don't Tracert Route before ACL Scan
-N not Don't ACL Scan After Tracert Router
-t tcp Tracert the Route By TCP. Default By ICMP (2K/2003)
-u udp Tracert the Route By UDP. Default By ICMP
-i:interface Tracert Over No.x NetWork Interface. Default No.0 Nic
-w:wait Tracert Wait timeout milliseconds for each reply.
-h:hop Tracert Maximum number of hops to search for target.
-l:ttl Set TTL Of ACL Scan. Must Use With "-n". Default TTL=2
-o:port1-port2 ACL Scan between port1 2 port2. Default 0-65535
-p:protocol ACL Scan Protocol (TCP or UDP). Default TCP+UDP
x-firewalk是一款基于RAW SOCKET,利用ICMP TTL TIME-EXCEEDED包特性使用ICMP\UDP\TCP
协议进行tracert和端口ACL扫描的综合性网络小工具。可以在WIN2K/XP/2003 OS平台上运行。
由于XP SP2对系统的RAW SOCKET进行了修改和限制,将无法使用其中tracert功能中的TCP部分。
二、使用介绍
1.Tracert部分
1.1
我们在使用系统自带的tracert.exe的时候,经常发现,很多的站点无法Tracert,如下所示(拷贝CMD的输出):
(当然跟各自所在的网络也有关系,同样是电信的网络,限制的情况也是不同的)
Microsoft Windows 2000 [Version 5.00.2195]
(C) 版权所有 1985-2000 Microsoft Corp.
c:\winnt\system32>tracert www.163.net
Tracing route to www.163.net [202.108.252.146]
over a maximum of 30 hops:
1 * * * Request timed out.
2 * * * Request timed out.
3 * * * Request timed out.
4 * * * Request timed out.
5 * * * Request timed out.
6 * * * Request timed out.
7 * * * Request timed out.
8 * * * Request timed out.
9 * * * Request timed out.
10 * * * Request timed out.
11 * * * Request timed out.
12 * * * Request timed out.
13 *
.....
这里的原因是因为现在Internet上很多的路由节点出于某些原因,过滤了ICMP type=8 code=0(也就是PING的请求包)。
使得系统自带的基于这个这个协议工作的tracert.exe无法正常工作,而一路返回"request time out".
1.2
所以,如果我们想继续tracert,必须弃用ICMP协议作为探测协议,而改用其他协议。以下是x-firewalk
改用UDP协议后对www.163.net的tracert输出结果:
Microsoft Windows 2000 [Version 5.00.2195]
(C) 版权所有 1985-2000 Microsoft Corp.
e:\myprogram\vc\firewalk\Release>x-firewalk.exe www.163.net -u -N
Tracing route to www.163.net [202.108.252.146] by UDP
over No.0 netWork interface with ip [10.11.11.177]
over a maximum of 32 hops, timeout in 3000 milliseconds:
1 * * * Request Timed Out
2 31 ms 15 ms 32 ms 202.97.41.209 [中国电信 骨干网]
3 15 ms 47 ms 31 ms 202.97.35.25 [ CZ88.NET ]
4 32 ms 31 ms 31 ms 202.97.46.38 [中国电信 骨干网]
5 156 ms 157 ms 156 ms 219.158.32.1 [北京市 网通]
6 250 ms 250 ms 250 ms 219.158.13.9 [北京市 网通]
7 266 ms 250 ms 250 ms 202.96.12.162 [北京市 CHINANET-BJ]
8 265 ms 250 ms 250 ms 202.106.193.150 [北京市 路由器]
9 250 ms * 250 ms 202.106.193.114 [北京市 路由器]
10 266 ms 250 ms 250 ms 61.148.3.30 [北京市 网通]
11 * 250 ms 250 ms 202.106.48.129 [北京市 网通]
12 250 ms * 250 ms 202.106.48.6 [北京市 网通]
13 265 ms 250 ms * 202.108.252.146 [北京市 网通]
14 250 ms 250 ms 266 ms 202.108.252.146 [北京市 网通]
Trace complete.
这样,通过改用UDP协议作为探测协议,我们成功地Tracert出了到www.163.net的路由情况。
1.3
但是,我们还有可能遭遇即使使用UDP协议,也无法完成Tracert的情况,如下所示:
Microsoft Windows 2000 [Version 5.00.2195]
(C) 版权所有 1985-2000 Microsoft Corp.
e:\myprogram\vc\firewalk\Release>x-firewalk.exe www.163.com -u
Tracing route to www.163.com [202.108.9.16] by UDP
over No.0 netWork interface with ip [10.11.11.177]
over a maximum of 32 hops, timeout in 3000 milliseconds:
1 * * * Request Timed Out
2 16 ms 47 ms 31 ms 202.97.41.209 [中国电信 骨干网]
3 31 ms 16 ms 31 ms 202.97.35.25 [ CZ88.NET ]
4 31 ms 31 ms 32 ms 202.97.46.58 [中国电信 骨干网]
5 172 ms 171 ms 157 ms 219.158.32.93 [北京市 网通]
6 265 ms 266 ms 250 ms 219.158.13.9 [北京市 网通]
7 266 ms 250 ms 250 ms 202.96.12.154 [北京市 CHINANET-BJ]
8 250 ms 250 ms 250 ms 202.106.193.38 [北京市 路由器]
9 * 234 ms 250 ms 202.106.193.166 [北京市 路由器]
10 266 ms 250 ms 250 ms 61.148.3.234 [北京市 网通]
11 * * * Request Timed Out
12 * * * Request Timed Out
13 * * * Request Timed Out
14 * * * Request Timed Out
15 * * * Request Timed Out
16 * *
.....
这里的原因有两种,第一种,从第11跳路由开始,设备过滤了UDP协议,或只允许某些特定的UDP包通过,
使得Tracert失败。第二种,即使最后的UDP包达到了目标主机,但是产生的ICMP TYPE=3 CODE=3的端口不可到达
ICMP报文在返回时,被路上的某个设备过滤。所以和使用ICMP作为探测协议一样,UDP一样存在由于被过滤某些
特定报文而无法tracert的情况。
1.4
所以,我们还有第三种选择,使用TCP作为探测协议。而使用这种协议作为探测协议,很明显,可以有效地克服
上面使用UDP协议时候所可能遭遇的情况。(第一,因为目标肯定是个WEB服务器,各个节点几乎不可能过滤目标
端口为80的TCP包。第二,最终到达目标主机的TCP包返回的也是TCP包而不是ICMP包,被过滤的可能性几乎为0)。
如下所示:
Microsoft Windows 2000 [Version 5.00.2195]
(C) 版权所有 1985-2000 Microsoft Corp.
e:\myprogram\vc\firewalk\Release>x-firewalk.exe www.163.com -t -N
Tracing route to www.163.com [202.108.9.16] by TCP
over No.0 netWork interface with ip [10.11.11.177]
over a maximum of 32 hops, timeout in 3000 milliseconds:
1 * * * Request Timed Out
2 32 ms 15 ms 16 ms 202.97.41.209 [中国电信 骨干网]
3 16 ms 31 ms 32 ms 202.97.35.25 [ CZ88.NET ]
4 31 ms 31 ms 31 ms 202.97.46.58 [中国电信 骨干网]
5 157 ms 140 ms 156 ms 219.158.32.93 [北京市 网通]
6 250 ms 266 ms * 219.158.13.9 [北京市 网通]
7 266 ms 250 ms 250 ms 202.96.12.154 [北京市 CHINANET-BJ]
8 250 ms 250 ms 250 ms 202.106.193.38 [北京市 路由器]
9 * 250 ms 250 ms 202.106.193.166 [北京市 路由器]
10 * 250 ms 250 ms 61.148.3.234 [北京市 网通]
11 250 ms 250 ms 250 ms 202.108.9.16 [北京市 网通]
Trace complete.
通过使用TCP作为探测协议,我们最终完整地完成了Tracert。
x-firewalk默认使用ICMP协议进行Tracert,你必须指定-u 或 -t参数来改变探测协议。
BTW,如果你有兴趣,可以对www.163.net分别使用UDP和TCP协议进行Tracert.发现并思考其中的区别。
2.ACL(Acess Control List)扫描部分
第一部分的Tracert,很大程度上,是为这个ACL扫描服务的。通过Tracert,我们获得了通往目标系统
所要经过的路由跳数。参考这个数字,手工设置IP头里的TTL的数,我们可以获取数据报文所路径的某个
路由时,该路由上的ACL列表(目前只实现了基于目标端口ACL探测)。
2.1
获取本地网关的端口ACL。
在1.2里,我们知道,通往www.163.net的路由跳数是14,如果把去往www.163.net某个TCP或则UDP包的IP头
里的TTL指定为2,那么,这个数据包在穿过本地的网关时,TTL被减去1,但是在到达下一跳时候,由于TTL再减
去1为0,这个时候路由器照规定将向源地址发送ICMP TTL TIME-EXCEEDED报文。(以上就是tracert的原理)通
过分析返回的ICMP TTL TIME-EXCEEDED报文(在ICMP头后包含一个完整的返回的IP头和后8个字节的信息),
我们可以准确地分析判断出,目标端口(源端口)哪种组合是被本地网关所允许的,因为如果本地网关不允许某
种TCP/UDP报文通过,是不会达到下一跳路由,也不能产生ICMP TTL TIME-EXCEEDED报文返回。
下面的演示是在一个由内对外访问有限制的网络里做的:
Microsoft Windows 2000 [Version 5.00.2195]
(C) 版权所有 1985-2000 Microsoft Corp.
e:\myprogram\vc\firewalk\Release>x-firewalk.exe www.163.net -n -l:2
Scan TCP UDP Protocol, Port from 0 to 65535, TTL=2:
TCP 21 Port is Open By ACL!
TCP 25 Port is Open By ACL!
UDP 53 Port is Open By ACL!
TCP 80 Port is Open By ACL!
TCP 110 Port is Open By ACL!
TCP 3389 Port is Open By ACL!
UDP 8000 Port is Open By ACL!
ACL Scan Complete.
如上所示,通过把TTL设置为2,借助第2跳路由器返回的ICMP TTL TIME-EXCEEDED报文,我们准确地判断出了本地
网关在TCP/UDP上所做的目标端口访问限制。
2.2
获取到达目标系统的沿途ACL列表
在理解2.1的基础上,我们由时候需要获取到达目标系统www.163.net沿途的ACL情况。这个时候,我们
只需要把ACL手工指定为13,那么数据包里的TTL在到达第13跳的时候为1,后面的情况,和2.1里阐述
是一样的。而下面的演示,区别于2.1,是在一个由内对外访问没有限制的网络里做的:
Microsoft Windows 2000 [Version 5.00.2195]
(C) 版权所有 1985-2000 Microsoft Corp.
e:\myprogram\vc\firewalk\Release>x-firewalk.exe www.163.net -l:13 -n
Scan TCP UDP Protocol, Port from 0 to 65535, TTL=16:
TCP 80 Port is Open By ACL!
ACL Scan Complete.
如上所示,通过把TTL设置为13,我们判断出最终只有目标端口为80的TCP才能达到目标主机上。
沿途上的某个节点过滤了初了TCP80端口以外的其他报文(而这个过滤,基本上100%是最后一节点做的)
2.3
ACL扫描需要你发挥现象力,工具已在手,就看你怎么用了...
3.其他使用注意事项
3.1
在多网卡主机上运行时,请注意选择正确的网络接口,使用'-i'参数指定要工作的网络接口编号。
如:
E:\myprograme\VC\firewalk\Release>x-firewalk.exe www.163.net -i:2
Tracing route to www.163.net [202.108.255.212] by ICMP
over No.2 netWork interface with ip [59.37.118.213]
over a maximum of 32 hops, timeout in 3000 milliseconds:
1 <10 ms <10 ms <10 ms 61.154.14.254 [福建省福州市 电信ADSL]
2 <10 ms <10 ms <10 ms 220.160.91.53 [福建省福州市 电信]
3 <10 ms <10 ms <10 ms 220.160.92.193 [福建省福州市 电信]
4 <10 ms ......
3.2
-n 和 -N 分别代表了不同的选项,请注意区别对待。默认情况下,tracert后以获取到的跳数减去2
作为TTL进行端口ACL扫描,请根据实际运用需求,设置这两个参数。
三、后话
如果你对技术原理感兴趣。可参考以下链接来获取详细的说明和讨论:
http://www.nsfocus.net/index.php?act=magazine&do=view&mid=398
https://www.xfocus.net/bbs/index.php?act=ST&f=3&t=49337&page=all#entry207174
E-mail : crackersoftware@163.com
HomePage: http://www.xdoors.net
如有错误,请批评指正.希望能认识更多志同道合的朋友!
All For Free Live Dream.....
All By xtiger
2006.8.8