67534">
三、针对TTL返回值
可以用ping命令去探测一个主机,根据TTL基数可以推测操作系统的类型。对于一个没有经过任何网关和路由的网络,直接 ping对方系统得到的TTL值,被叫做“TTL基数”。网络中,数据包每经过一个路由器,TTL就会减1,当TTL为0时,这个数据包就会被丢弃。
通常情况下,Windows的TTL的基数是128,而早期的Red Hat Linux和Solaris的TTL基数是255,FreeBSD和新版本的Red Hat Linux的TTL基数是64.比如,ping一个Red Hat系统,显示如下:
Pinging 192.168.0.1 with 32 bytes of data:
Reply from 192.168.0.1: bytes=32 time <10ms TTL=64
Reply from 192.168.0.1: bytes=32 time <10ms TTL=64
Reply from 192.168.0.1: bytes=32 time <10ms TTL=64
Reply from 192.168.0.1: bytes=32 time <10ms TTL=64
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
用以下命令修改Red Hat Linux的TTL基数为128(本来为64):
# echo 128 > /proc/sys/net/ipv4/ip_default_ttl
若想使设置永久生效,可以修改/etc/sysctl.conf配置文件,添加如下一行:
net.ipv4.ip_default_ttl = 128
保存退出后,再ping 192.168.0.1,TTL基数就变为128了。
有时通过扫描3389端口和22端口,也可以推测操作系统的类型。Windows下一般利用TCP协议的3389端口进行远程控制,而Linux可能会用TCP协议的22端口,提供带有加密传输的SSH服务。
为了安全,可以利用iptables来限制22端口的SSH登录,让非授权的IP扫描不到TCP 22端口的存在:
#iptables -I INPUT -s ! xx.xx.xx.xx -p tcp ——dport 22 -j DROP
利用iptables,将本机的TCP 3389端口转移到其它开有3389端口的计算机上,给Linux系统伪装出一个提供服务的TCP 3389端口。命令如下:
#echo 1 > /proc/sys/net/ipv4/ip_forward
#iptables -t nat -I PREROUTING -p tcp ——dport 3389 -j DNAT ——to xx.xx.xx.xx
#iptables -t nat -I POSTROUTING -p tcp ——dport 3389 -j MASQUERADE
第一条命令表示允许数据包转发;第二条命令表示转发TCP 3389到xx.xx.xx.xx;第三条命令表示使转发数据包实现“双向通路”,给数据包设置一个正确的返回通道。若想使转发永久生效,可以把以上命令添加到/etc/rc.local文件中。
这样,当黑客扫描服务器所开端口的时候,就找不到 22号端口,而是看到一个伪装的 3389端口,从而不能正确判断出操作系统的类型。
本文来源:不详 作者:佚名