操作系统的识别有很多方法,大多跟TCP/IP协议有关。操作系统对TCP/IP的实现,都是严格遵循RFC标准的,问题RFC标准仅描述了TCP/IP的基本要求,并没有对所有内容形成统一的行业标准,于是各操作系统厂商在实现了TCP/IP协议栈的时候,或多或少的保留了一些独特的痕迹,很多人把这种痕迹形象地称为“操作系统指纹”。

操作系统识别可以分为主动识别和被动识别。
主动识别是指主动往目标主机发送数据包,并对响应数据进行分析的过程。最典型的分析方法是TTL分析。
TTL是IPv4数据包头部的一个字段,是P数据包可以转发的最大跳数,每转1跳TTL值减1。TTL是由发送主机设置的,不同操作系统有不同的TTL初始值。



上图ttl是255,所以我们可以推测是UNIX系统。
使用命令非常简单,在启动nmap时,增加-O参数,就可以启动系统识别功能。


Nmap使用的技术有FIN探测、ISN探测、Don’t Fragment位探测、TCP初始窗口的大小探测、ACK值探测、ICMP出错消息抑制、ICMP出错消息回射完整性等。


从不主动发送数据包,只是被动的捕获远程主机返回的包,来分析其OS类型版本。
被动识别技术特性:通用性更强、准确性更低。
被动识别使用的技术有TTL值判断、TCP窗口大小判断、DF标志位判断、TOS操作系统服务类型分析。
banner技术通过主机提供的各种服务进行分析,也称为“Banner识别技术”。

人工判定主要依据经验,比如目标服务器上运行了一个ASP.net语言编写的网站,那么可以推断目标主机的操作系统是Windows server系列的操作系统,而且版本会在2003之后。
(1)可以部署防火墙和主侵防御系统,确保外部主机无法直接扫描内部主机。
(2)banner抓取比较防御,可以修改操作系统的配置文件,屏蔽或删除某些具有特征的信息。