利用TTL值简单判定系统类型

/ns/wz/net/data/20010414010114.htm

转载自[天极网-安全之路]
-----------------------------------------------------------------

  一、关于PING的介绍

PING命令来检查要到达的目标IP地址并记录结果。

ping 命令显示目标是否响应以及接收答复所需的时间。

  如果在传递到目标过程中有错误,ping 命令将显示错误消息。

ICMP ECHO(Type 8) 和ECHO Reply (Type 0)

  我们使用一个ICMP ECHO数据包来探测主机地址 HOST B 是否存活(当然在主机没有被配置为过滤ICMP形式)

  通过简单的发送一个ICMP ECHO(Type 8)数据包到目标主机

  如果ICMP ECHO Reply(ICMP type 0)数据包 HOST A 可以接受到,说明主机是存活状态。

  如果没有就可以初步判断主机没有在线或者使用了某些过滤设备过滤了ICMP的REPLY。

+---------------------------------------------------------------+
| |
| +-------+ +-------+ |
| | | ICMP Echo Request | | |
| | HOST | --------------------------> | HOST | |
| | | | | |
| | A | | B | |
| | | <-------------------------- | | |
| | | ICMP Echo Reply | | |
| +-------+ +-------+ |
| |
+---------------------------------------------------------------+

  这种机制就是我们通常所用的ping命令来检测目标主机是否可以ping到。

  典型的例子

C:\>ping 192.168.0.1

Pinging 192.168.0.1 with 32 bytes of data:

Reply from 192.168.0.1: bytes=32 time<10ms TTL=128
Reply from 192.168.0.1: bytes=32 time<10ms TTL=128
Reply from 192.168.0.1: bytes=32 time<10ms TTL=128
Reply from 192.168.0.1: bytes=32 time<10ms TTL=128

Ping statistics for 192.168.0.1:
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
Minimum = 0ms, Maximum = 0ms, Average = 0ms

  二、注意TTL

TTL:生存时间

  指定数据报被路由器丢弃之前允许通过的网段数量。

  TTL 是由发送主机设置的,以防止数据包不断在 IP 互联网络上永不终止地循环。转发 IP 数据包时,要求路由器至少将 TTL 减小 1。

  使用PING时涉及到的 ICMP 报文类型

一个为ICMP请求回显(ICMP Echo Request)

一个为ICMP回显应答(ICMP Echo Reply)

  三、TTL 字段值可以帮助我们识别操作系统类型。

UNIX 及类 UNIX 操作系统 ICMP 回显应答的 TTL 字段值为 255

Compaq Tru64 5.0 ICMP 回显应答的 TTL 字段值为 64

微软 Windows NT/2K操作系统 ICMP 回显应答的 TTL 字段值为 128

微软 Windows 95 操作系统 ICMP 回显应答的 TTL 字段值为 32

当然,返回的TTL值是相同的

  但有些情况下有所特殊

LINUX Kernel 2.2.x & 2.4.x ICMP 回显应答的 TTL 字段值为 64

FreeBSD 4.1, 4.0, 3.4;
Sun Solaris 2.5.1, 2.6, 2.7, 2.8;
OpenBSD 2.6, 2.7,
NetBSD
HP UX 10.20
ICMP 回显应答的 TTL 字段值为 255

Windows 95/98/98SE
Windows ME
ICMP 回显应答的 TTL 字段值为 32

Windows NT4 WRKS
Windows NT4 Server
Windows 2000
ICMP 回显应答的 TTL 字段值为 128

  这样,我们就可以通过这种方法来辨别

  操作系统 TTL

LINUX 64
WIN2K/NT 128
WINDOWS 系列 32
UNIX 系列 255

  经过测试的操作系统如下:

LINUX Kernel 2.2.x, Kernel 2.4t1-6; FreeBSD 4.1,4.0,3.4; OpenBSD 2.7,2.6; NetBSD
1.4.2; Sun Solaris 2.5.1,2.6,2.7,2.8; HP-UX 10.20, 11.0; AIX 4.1, 3.2; Compaq
Tru64 5.0; Irix 6.5.3,6.5.8; BSDI BSD/OS 4.0,3.1; Ultrix 4.2-4.5; OpenVMS 7.1-2;
Windows 95/98/98SE/ME; Windows NT 4 Workstation SP3, SP4, SP6a; Windows NT 4
Server SP4; Windows 2000 Professional, Server, Advanced Server.

  附:

  ICMP报文的类型包括如下:

ECHO (Request (Type 8), Reply (Type 0))--回显应答,

Time Stamp (Request (Type 13), Reply (Type 14))--时间戳请求和应答,

Information (Request (Type 15), Reply (Type16))--信息请求和应答,

Address Mask (Request (Type 17), Reply (Type 18))--地址掩码请求和应答等

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
附:转到20cn之前,再加点吧,都是copy别人的,侵犯版权的话一定要和MM说哦
首先要提一下TTL到底是什么东西, 有的初学者可能不知道TTL是什么, 大虾们对不住了.
TTL(生存时间)
TTL是IP协议包中的一个值,它告诉网络路由器包在网络中的时间是否太长而应被丢弃。有很多原因使包在一定时间内不能被传递到目的地。例如,不正确的路由表可能导致包的无限循环。一个解决方法就是在一段时间后丢弃这个包,然后给发送者一个报文,由发送者决定是否要重发。TTL的初值通常是系统缺省值,是包头中的8位的域。TTL的最初设想是确定一个时间范围,超过此时间就把包丢弃。由于每个路由器都至少要把TTL域减一,TTL通常表示包在被丢弃前最多能经过的路由器个数。当记数到0时,路由器决定丢弃该包,并发送一个ICMP报文给最初的发送者。

Windows 95/98中TTL的缺省值为32。有人建议当到达一个节点比较困难时,把此值设为128。ping和tracerouter都使用TTL值以尝试到达给定的主机或跟踪到那个主机的路由。traceroute把包的TTL值设得较小,使它在到达目的的路上被各个路由器连续的丢弃。发出包到受到返回的ICMP报文之间的时间用来计算从一个路由器到另一个路由器的时间。

使用多路复用的IP协议,TTL值表示一个包被转发的范围。有以下转换:0, 限制在同一主机 1, 限制在同一子网 32, 限制在同一节点 64, 限制在同一区域(region)128,限制在同一大陆(continent)255,

一般ping出来的TTL值不完全都是以上文章所提的数字, 对这个还有很多争议,有一种说法就是:
TTL=244 的时候就是说你发一 个数据到你PING 的地址只间要通过11个路游器。如果TTL=126的话就是中间要通过2个路游器
如果接近255的话就是UNIX系统
如果接近128的话就是WINDOWS系统

仅供参考, 我觉得从理论上说是正确的,还是请大家自己思考.再加一句, TTL值是可以修改的.
----------春之律
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~