DF位识别:许多操作系统在送出的一些包中设置IP的DF(不分片)位。
WINDOW大小:检查返回包的窗口大小。特定操作系统反应的窗口大小基本是常数,例如,AIX 是唯一用0x3F25的),Microsoft 以及OpenBSD 与FreeBSD用的是0x402E。
ACK 序号识别:不同实现中ACK的值是不同的。例如,如果你送了一个FIN|PSH|URG 到一个关闭的TCP 端口。大多数实现会设置ACK 为你的初始序列数,而Windows 和一些傻打印机会送给你序列数加1。
在之后,Fyodor 和Ofir又分析和收集利用ICMP协议的操作系统特性来进行的主机系统判别,这种主动的识别方式都经过了大量的分析,原理和上面的TCP/IP协议识别相同,比如:用ICMP的地址掩码请求来探测SUN操作系统,对于ICMP地址掩码请求,只有少数操作系统会产生相应的应答,这些系统包括ULTRIX OpenVMS, Windows 95/98/98 SE/ME,
NT below SP 4, 和 SUN Solaris机器。但SUN对分片ICMP地址掩码请求的应答同其他操作系统不相同,这样就可以来识别SUN主机操作系统。
和主动的协议识别原理相同,Lance Spitzner在《Passive Fingerprinting》中提出了被动的协议识别,同样用来判别主机系统。这种办法主要集中考虑:
1、TTL的设置
2、WINDOW SIZE:操作系统设置的窗口大小
3、DF:操作系统是否设置分片位
4、TOS:操作系统设置的服务类型
对于TTL,对于一个操作系统来说一般是固定的,比如LINUX Kernel 2.2.x & 2.4.x的 TTL 字段值为 64,
FreeBSD 4.1, 4.0, 3.4; Sun Solaris 2.5.1, 2.6, 2.7, 2.8;的 TTL为 255 Windows NT,Windows 2000 的为 128等,同时将配合其他需验证的内容,比如:LINUX的窗口值是0x7D78,Solaris2.6-2.7的窗口值有几种 0x2328,0x2238等等。我们以WIN2000为例,它的TTL为"128",窗口大小在"17000-18000"这个范围内,并且设置分片位,即DF为1,
而操作系统设置的服务类型TOS为"0",如果我们对接收的原始数据分析得到这样的结果,那么我们可以判断这是一个WIN2000的操作系统。
当然被动协议识别操作系统也需要分析各个操作系统的不同反馈属性,然后根据得到的信息同收集的属性相比较。比如多数系统使用DF位设置,但是有些系统如 SCO和OPENBSD不使用这个DF标志,这样就可以用来识别一些没有设置DF位的操作系统。被动协议识别也可以用来判断远程代理防火墙,因为代理防火墙重建对客户的连接,它有它自身的特征代码,也可以用这样的办法来分析。