通过返回的TTL值来判断系统类型
2017-01-18 15:37
274 查看
在使用Ping命令来判断网络状态的时候,通常都会看到TTL的具体数值,TTL是发送主机设置的,用来防止数据包不断在IP互联网上面永不终止地循环的一个值,它表示在网络层的数据包在被丢弃前最多能经过的路由器个数,TTL字段可以帮助我们识别操作系统类型,下面我们就来了解一下TTL的工作原理,以及如何通过TTL识别目标主机操作系统类型。
什么是TTLTTL(Time To Live,生存时间)是IP协议包中的一个值,当我们使用Ping命令进行网络连通测试或者是测试网速的时候,本地计算机会向目的主机发送数据包,但是有的数据包会因为一些特殊的原因不能正常传送到目的主机,如果没有设置TTL值的话,数据包会一直在网络上面传送,浪费网络资源。数据包在传送的时候至少会经过一个以上的路由器,当数据包经过一个路由器的时候,TTL就会自动减1,如果减到0了还是没有传送到目的主机,那么这个数据包就会自动丢失,这时路由器会发送一个ICMP报文给最初的发送者。举个例子,如果一个主机的TTL是64,那么当它经过64个路由器后还没有将数据包发送到目的主机的话,那么这个数据包就会自动丢弃。如何通过TTL来判断目的主机的操作系统类型不同的操作系统的默认TTL值是不同的, 所以我们可以通过TTL值来判断主机的操作系统,但是当用户修改了TTL值的时候,就会误导我们的判断,所以这种判断方式也不一定准确。下面是默认操作系统的TTL:WINDOWS NT/2000 TTL:128WINDOWS 95/98 TTL:32UNIX TTL:255LINUX TTL:64WIN7 TTL:64 我们先来看两个例子:
例1:D:\Documents and Settings\hx>ping 61.152.93.131Pinging 61.152.93.131 with 32 bytes of data:Reply from 61.152.93.131: bytes=32 time=21ms TTL=118Reply from 61.152.93.131: bytes=32 time=19ms TTL=118Reply from 61.152.93.131: bytes=32 time=18ms TTL=118Reply from 61.152.93.131: bytes=32 time=22ms TTL=118Ping statistics for 61.152.93.131:Packets: Sent = 4, Received = 4, Lost = 0 (0% lossApproximate round trip times in milli-seconds:Minimum = 18ms, Maximum = 22ms, Average = 20ms
例2:D:\Documents and Settings\hx>ping 61.152.104.40Pinging 61.152.104.40 with 32 bytes of data:Reply from 61.152.104.40: bytes=32 time=28ms TTL=54Reply from 61.152.104.40: bytes=32 time=18ms TTL=54Reply from 61.152.104.40: bytes=32 time=18ms TTL=54Reply from 61.152.104.40: bytes=32 time=13ms TTL=54Ping statistics for 61.152.104.40:Packets: Sent = 4, Received = 4, Lost = 0 (0% lossApproximate 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 Settings\hx>tracert 61.152.104.40Tracing route to 61.152.104.40 over a maximum of 30 hops1 13 ms 16 ms 9 ms 10.120.32.12 9 ms 9 ms 11 ms 219.233.244.1053 12 ms 10 ms 10 ms 219.233.238.1734 15 ms 15 ms 17 ms 219.233.238.135 14 ms 19 ms 19 ms 202.96.222.736 14 ms 17 ms 13 ms 202.96.222.1217 14 ms 15 ms 14 ms 61.152.81.868 15 ms 14 ms 13 ms 61.152.87.1629 16 ms 16 ms 28 ms 61.152.99.2610 12 ms 13 ms 18 ms 61.152.99.9411 14 ms 18 ms 16 ms 61.152.104.40Trace complete.
我们可以看到,如果不包含本机路由的话(第一个路由地址10.120.32.1为本机网络IP),数据包是经过了10个路由器,而不是前面所说的74个路由器。如何修改本机电脑上面的默认TTL值通过修改本机上的TTL值可以混淆***者的判断(当然,很少有用户会这么做)。TTL值在注册表的位置是:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters(通过在cmd命令里面输入:regedit,然后回车的方式可以打开注册表)。其中有个DefaultTTL的DWORD值,其数据就是默认的TTL值了,我们可以修改DefaultTTL里面的TTL默认值,但不能大于十进制的255。
什么是TTLTTL(Time To Live,生存时间)是IP协议包中的一个值,当我们使用Ping命令进行网络连通测试或者是测试网速的时候,本地计算机会向目的主机发送数据包,但是有的数据包会因为一些特殊的原因不能正常传送到目的主机,如果没有设置TTL值的话,数据包会一直在网络上面传送,浪费网络资源。数据包在传送的时候至少会经过一个以上的路由器,当数据包经过一个路由器的时候,TTL就会自动减1,如果减到0了还是没有传送到目的主机,那么这个数据包就会自动丢失,这时路由器会发送一个ICMP报文给最初的发送者。举个例子,如果一个主机的TTL是64,那么当它经过64个路由器后还没有将数据包发送到目的主机的话,那么这个数据包就会自动丢弃。如何通过TTL来判断目的主机的操作系统类型不同的操作系统的默认TTL值是不同的, 所以我们可以通过TTL值来判断主机的操作系统,但是当用户修改了TTL值的时候,就会误导我们的判断,所以这种判断方式也不一定准确。下面是默认操作系统的TTL:WINDOWS NT/2000 TTL:128WINDOWS 95/98 TTL:32UNIX TTL:255LINUX TTL:64WIN7 TTL:64 我们先来看两个例子:
例1:D:\Documents and Settings\hx>ping 61.152.93.131Pinging 61.152.93.131 with 32 bytes of data:Reply from 61.152.93.131: bytes=32 time=21ms TTL=118Reply from 61.152.93.131: bytes=32 time=19ms TTL=118Reply from 61.152.93.131: bytes=32 time=18ms TTL=118Reply from 61.152.93.131: bytes=32 time=22ms TTL=118Ping statistics for 61.152.93.131:Packets: Sent = 4, Received = 4, Lost = 0 (0% lossApproximate round trip times in milli-seconds:Minimum = 18ms, Maximum = 22ms, Average = 20ms
例2:D:\Documents and Settings\hx>ping 61.152.104.40Pinging 61.152.104.40 with 32 bytes of data:Reply from 61.152.104.40: bytes=32 time=28ms TTL=54Reply from 61.152.104.40: bytes=32 time=18ms TTL=54Reply from 61.152.104.40: bytes=32 time=18ms TTL=54Reply from 61.152.104.40: bytes=32 time=13ms TTL=54Ping statistics for 61.152.104.40:Packets: Sent = 4, Received = 4, Lost = 0 (0% lossApproximate 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 Settings\hx>tracert 61.152.104.40Tracing route to 61.152.104.40 over a maximum of 30 hops1 13 ms 16 ms 9 ms 10.120.32.12 9 ms 9 ms 11 ms 219.233.244.1053 12 ms 10 ms 10 ms 219.233.238.1734 15 ms 15 ms 17 ms 219.233.238.135 14 ms 19 ms 19 ms 202.96.222.736 14 ms 17 ms 13 ms 202.96.222.1217 14 ms 15 ms 14 ms 61.152.81.868 15 ms 14 ms 13 ms 61.152.87.1629 16 ms 16 ms 28 ms 61.152.99.2610 12 ms 13 ms 18 ms 61.152.99.9411 14 ms 18 ms 16 ms 61.152.104.40Trace complete.
我们可以看到,如果不包含本机路由的话(第一个路由地址10.120.32.1为本机网络IP),数据包是经过了10个路由器,而不是前面所说的74个路由器。如何修改本机电脑上面的默认TTL值通过修改本机上的TTL值可以混淆***者的判断(当然,很少有用户会这么做)。TTL值在注册表的位置是:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters(通过在cmd命令里面输入:regedit,然后回车的方式可以打开注册表)。其中有个DefaultTTL的DWORD值,其数据就是默认的TTL值了,我们可以修改DefaultTTL里面的TTL默认值,但不能大于十进制的255。
相关文章推荐
- php 通过PATH_SEPARATOR判断当前服务器系统类型
- 通过ABAP代码判断当前系统类型,BYD还是S4 OP还是S4 Cloud
- php 通过PATH_SEPARATOR判断当前服务器系统类型
- 今天才知道,ping返回的TTL值可以判断是系统还是路由
- 如何通过数字来判断linux系统分区的类型
- php 通过PATH_SEPARATOR判断当前服务器系统类型
- C#通过系统API判断网络连接类型及状态
- 通过 Object.prototype.toString.call() 进行类型判断
- File Header文件头,通过检查文件头来判断文件类型
- Java 通过魔数判断上传文件的类型
- Hibernate的count(*)函数通过调用uniqueResult方法的返回值类型
- JavaWeb中通过从request请求中获取浏览器类型、系统信息、客户端ip等信息
- Android中通过进程注入技术修改系统返回的Mac地址
- js 判断当前的手机系统类型
- 转载 Android解决通过Intent调用系统拍照程序,返回图片太小的问题
- 通过剖析(navigator.userAgent)浏览器内核判断浏览器类型
- salesforce 零基础学习(五十八)通过sObject的field返回其对应的基础类型
- (7)通过ICE平面扩展类型系统
- 通过文件二进制信息判断图片类型(png,jpg,gif)
- 编写一个函数,从标准输入读取一列整数, 把这些值存储在一个动态分配的数组中并返回这个数组。 函数通过观察EOF判断输入列表是否结束。 数组的第一个数是数组包含的值的个数, 它的后面就是这些整数值。