OS 的识别方法有多种,最简单的就是用 TTL 值去识别。不同类型的 OS 默认的起始 TTL 值是不同的,比如,windows 的默认是 128-65,然后每经过一个路由,TTL 值减一。Linux/Unix 的值是 64,但有些特殊的 Unix 会是 255
python 脚本识别
#!/usr/bin/python
from scapy.all import *
import logging
logging.getLogger("scapy.runtime").setLevel(logging.ERROR)
import sys
if len(sys.argv) != 2:
print("Usage --/ttl_os.py [IP Address]")
print("Example --/ttl_os.py 192.168.0.1")
print("Example will preform ttl analysis to attempt to determine whether the system is windows or linux/unix")
sys.exit()
ip = sys.argv[1]
ans = sr1(IP(dst=str(ip))/ICMP(), timeout=1, verbose=0)
if ans == None:
print("NO response was returned")
elif int(ans[IP].ttl)<=64:
print("Host is Linux/Unix")
else:
print("Host is Windows")
nmap 识别 OS
NMAP 的 - O 参数可以进行 OS 的识别
nmap -O 192.168.0.1
基于网络监听的工作原理,Windows 和 Linux 发送出来的包是有很大区别的。被动式的扫描可以部署在网络进出口的地方,目的是让所经过的流量通过我的流量分析器。在 Kali 中存在工具 p0f,他会监听凡是通过本地网卡的流量。p0f 不但会探测 OS 类型,同时也会对目标上面所运行的应用程序进行探测。