先大致介绍一下TTL:
TTL全称 Time to Live,意思是生存中期。当我们对网络上的主机进行ping操作的时候,我们本地机器会发出一个数据包,数据包经过一定数量的路由器传送到目的主机,但 是由于很多的原因,一些数据包不能正常传送到目的主机,那如果不给这些数据包一个生存时间的话,这些数据包会一直在网络上传送,导致网络开销的增大。当数 据包传送到一个路由器之后,TTL就自动减1,如果减到0了还是没有传送到目的主机,那么就自动丢失。被自动丢弃的包,也就像我们ping的时候出现 Request timed out的情况了,这时就是采用增加TTL的方法来减少数据包无目的的游荡而增加网络资源的消耗。
下面就说下如何根据TTL值来估计操作系统吧。
默认情况下,Linux系统的TTL值为64或255,Windows NT/2000/XP系统的TTL值为128,Windows 98系统的TTL值为32,UNIX主机的TTL值为255。网上是这么说的,不过这些默认值是可以通过修改注册表来修改的,所以这也导致了用ping命 令来查看服务器不一定准确的。不过我估计不能有哪位哥这么蛋疼去修改这个东西吧。
例如我ping了一下人人网。
cloudfly@Fly:~$ ping www.renren.com
PING a.l.xiaonei.com 60.29.242.220) 5684) bytes of data.
64 bytes from 60.29.242.220: icmp_req=1 ttl=47 time=27.9 ms
64 bytes from 60.29.242.220: icmp_req=2 ttl=47 time=27.8 ms
64 bytes from 60.29.242.220: icmp_req=3 ttl=47 time=27.2 ms
64 bytes from 60.29.242.220: icmp_req=4 ttl=47 time=27.6 ms
^C64 bytes from 60.29.242.220: icmp_req=5 ttl=47 time=27.0 ms— a.l.xiaonei.com ping statistics —
5 packets transmitted, 5 received, 0% packet loss, time 20147ms
rtt min/avg/max/mdev = 27.011/27.526/27.907/0.368 ms
cloudfly@Fly:~$
这里TTL的值是47,可以估计出来是Linux操作系统。64-47+1=17,可以知道它经过了17个路由到了我这里。(加1是因为64是指0~64)
为什么不说是windows系统呢?128-47+1=82,经过了81个路由到的。其实这种情况不太可能,经过81个路由节点,那这网络基本可以说是瘫痪了。一般就找比ttl值大的而且与它最接近的应该就差不多了,经过路由节点一半都不会超过30个的。
如果真的特别纠结不知道应该是那个可以用tracert工具,linux下叫traceroute。linux下apt-get就能安装,window的话到tracert IP。
下面是我在ubuntu下traceroute 人人网出来的结果
cloudfly@Fly:~$ traceroute www.renren.com
traceroute to www.renren.com 60.29.242.220), 30 hops max, 60 byte packets
1 acm-base.local 192.168.17.254) 0.285 ms 0.260 ms 0.247 ms
2 192.168.11.1 192.168.11.1) 5.398 ms 5.400 ms 5.388 ms
3 219.217.226.254 219.217.226.254) 5.152 ms 5.141 ms 5.202 ms
4 202.118.168.5 202.118.168.5) 5.102 ms 5.078 ms 5.068 ms
5 202.118.168.1 202.118.168.1) 6.494 ms 6.485 ms 5.117 ms
6 202.118.168.73 202.118.168.73) 6.445 ms 6.949 ms 6.942 ms
7 10.0.0.2 10.0.0.2) 6.935 ms 38.703 ms 38.688 ms
8 202.118.170.38 202.118.170.38) 6.644 ms 6.641 ms 6.630 ms
9 202.112.53.105 202.112.53.105) 6.623 ms 6.597 ms 6.588 ms
10 202.112.46.97 202.112.46.97) 13.615 ms 13.588 ms 13.589 ms
11 202.127.216.33 202.127.216.33) 26.537 ms 26.508 ms 23.189 ms
12 * * *
13 202.112.6.42 202.112.6.42) 22.094 ms 22.099 ms 22.087 ms
14 211.151.224.145 211.151.224.145) 22.076 ms 22.067 ms 22.055 ms
15 211.151.224.89 211.151.224.89) 24.767 ms 22.030 ms 24.747 ms
16 211.151.250.54 211.151.250.54) 24.735 ms 24.713 ms 24.707 ms
17 60.28.194.140 60.28.194.140) 30.114 ms 30.220 ms 30.208 ms
18 60.29.242.220 60.29.242.220) 27.563 ms 27.575 ms 27.557 ms
cloudfly@Fly:~$
这里是表示经过了18路由。和上面计算的就符合了。这就可以确定是linux系统了。
下面是在网上找到的各个系统的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
Windows XP
ICMP 回显应答的 TTL 字段值为 128
转:http://www.cloudfly.info/archives/209