如何根据TTL判断主机的操作系统

    0
    5504

    在使用Ping命令来判断网络状态的时候,通常都会看到TTL的具体数值,TTL是发送主机设置的,用来防止数据包不断在IP互联网上面永不终止地循环的一个值,它表示在网络层的数据包在被丢弃前最多能经过的路由器个数,TTL字段可以帮助我们识别操作系统类型,下面我们就来了解一下TTL的工作原理,以及如何通过TTL识别目标主机操作系统类型。
      如何根据TTL判断主机的操作系统

    什么是TTL

    TTL(Time To Live,生存时间)是IP协议包中的一个值,当我们使用Ping命令进行网络连通测试或者是测试网速的时候,本地计算机会向目的主机发送数据包,但是有的数据包会因为一些特殊的原因不能正常传送到目的主机,如果没有设置TTL值的话,数据包会一直在网络上面传送,浪费网络资源。数据包在传送的时候至少会经过一个以上的路由器,当数据包经过一个路由器的时候,TTL就会自动减1,如果减到0了还是没有传送到目的主机,那么这个数据包就会自动丢失,这时路由器会发送一个ICMP报文给最初的发送者。举个例子,如果一个主机的TTL是64,那么当它经过64个路由器后还没有将数据包发送到目的主机的话,那么这个数据包就会自动丢弃。

    如何通过TTL来判断目的主机的操作系统类型

    不同的操作系统的默认TTL值是不同的, 所以我们可以通过TTL值来判断主机的操作系统,但是当用户修改了TTL值的时候,就会误导我们的判断,所以这种判断方式也不一定准确。下面是默认操作系统的TTL:
    WINDOWS NT/2000   TTL:128
    WINDOWS 95/98     TTL:32
    UNIX              TTL:255
    LINUX             TTL:64
    WIN7          TTL:64
     
    我们先来看两个例子:
     
    例1:
    D:Documents and Settingshx>ping 61.152.93.131
    Pinging 61.152.93.131 with 32 bytes of data:
    Reply from 61.152.93.131: bytes=32 time=21ms TTL=118
    Reply from 61.152.93.131: bytes=32 time=19ms TTL=118
    Reply from 61.152.93.131: bytes=32 time=18ms TTL=118
    Reply from 61.152.93.131: bytes=32 time=22ms TTL=118
    Ping statistics for 61.152.93.131:
    Packets: Sent = 4, Received = 4, Lost = 0 (0% loss
    Approximate round trip times in milli-seconds:
    Minimum = 18ms, Maximum = 22ms, Average = 20ms
     
    例2:
    D:Documents and Settingshx>ping 61.152.104.40
    Pinging 61.152.104.40 with 32 bytes of data:
    Reply from 61.152.104.40: bytes=32 time=28ms TTL=54
    Reply from 61.152.104.40: bytes=32 time=18ms TTL=54
    Reply from 61.152.104.40: bytes=32 time=18ms TTL=54
    Reply from 61.152.104.40: bytes=32 time=13ms TTL=54
    Ping statistics for 61.152.104.40:
    Packets: Sent = 4, Received = 4, Lost = 0 (0% loss
    Approximate round trip times in milli-seconds:
    Minimum = 13ms, Maximum = 28ms, Average = 19ms
     
    上面的两个例子中,例1里面的TTL值是118,比较接近128,所以我们可以初步判断这台机器的操作系统是Windows操作系统,128-118=10,所以它经过了10个路由器(不包含本机路由器)到达目的主机。在例2中我们可以看到TTL值是54,比较接近64,所以可以判断出这台机器使用的是Linux的操作系统,64-54=10,所以一共经过了10个路由器(不包含本机路由器)。有人也许会问为什么第二个例子中不认为它的TTL默认值是128,然后经过了74个路由器,所以128-74=54呢?首先,路由器在选择路径的时候会选择最佳的路由路径,当然,如果你想知道它经过了哪些路由器的话,可以使用cmd命令里面的tracert命令来查看,详情如下:
     
    D:Documents and Settingshx>tracert 61.152.104.40
    Tracing route to 61.152.104.40 over a maximum of 30 hops
    1 13 ms 16 ms 9 ms 10.120.32.1
    2 9 ms 9 ms 11 ms 219.233.244.105
    3 12 ms 10 ms 10 ms 219.233.238.173
    4 15 ms 15 ms 17 ms 219.233.238.13
    5 14 ms 19 ms 19 ms 202.96.222.73
    6 14 ms 17 ms 13 ms 202.96.222.121
    7 14 ms 15 ms 14 ms 61.152.81.86
    8 15 ms 14 ms 13 ms 61.152.87.162
    9 16 ms 16 ms 28 ms 61.152.99.26
    10 12 ms 13 ms 18 ms 61.152.99.94
    11 14 ms 18 ms 16 ms 61.152.104.40
    Trace complete.
     
    我们可以看到,如果不包含本机路由的话(第一个路由地址10.120.32.1为本机网络IP),数据包是经过了10个路由器,而不是前面所说的74个路由器。

    如何修改本机电脑上面的默认TTL值

    通过修改本机上的TTL值可以混淆攻击者的判断(当然,很少有用户会这么做)。TTL值在注册表的位置是:HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesTcpipParameters (通过在cmd命令里面输入:regedit,然后回车的方式可以打开注册表)。其中有个DefaultTTL的DWORD值,其数据就是默认的TTL值了,我们可以修改DefaultTTL里面的TTL默认值,但不能大于十进制的255。