nmap探测操作系统
拿一台旧路由器练手,探测nmap的操作 原理其实不玄乎。探测TCP/IP 协议栈在实现时,操作不同操作系统对 RFC 标准的系统解读和落地各有偏差。比如发送一个伪造的探测 FIN 包,Windows 会回 RST,操作Linux 却沉默;再比如把 TCP 窗口大小设为 0,系统某些系统会立刻调整自己的通告窗口,另一些则无动于衷。nmap 把这些偏差组合成一张特征表,发送十几种精心构造的探测包,收集响应后跟数据库比对,给出概率最高的匹配结果。 我第一次用的时候,觉得这玩意儿像算命。直到自己写了个简单的 SYN 扫描,拿两台虚拟机测试,才发现 nmap 的探测包设计有多刁钻。它甚至会在同一台主机上连续发送多个不同 TTL 值的包,观察响应包的 IP ID 增长模式——有些系统是全局递增,有些是每连接独立计数,这些细节全成了指纹。 但别指望它百发百中。内网里一台跑着 Linux 的打印机,nmap 可能会报成“Apple AirPort 或嵌入式设备”,因为精简版协议栈只实现了必需功能,指纹特征太少。更麻烦的是防火墙和 NAT,它们会改写 TTL、重组分片,甚至直接丢弃探测包。我遇到过一台经过三层 NAT 的设备,nmap 只给出“Too many matches”,最后靠 MAC 地址前缀才确认是台思科交换机。 还有个坑:伪装。有人用 iptables 的 不过话说回来,日常运维里它够用了。我习惯把 当然,别拿它扫未经授权的目标。这工具在错误的人手里就是撬锁的万能钥匙。我见过有人拿 nmap 扫公司隔壁的 Wi-Fi 路由器,结果被网安部门约谈。技术本身中立,但用的人得清楚边界在哪。 最后提一句,nmap 的 OS 指纹库更新不算勤快,新出的 Windows 版本偶尔会识别成“Windows 10 或 Windows 11”。真要较真,可以自己抓包分析 TTL 和窗口大小,手工补一条规则。不过对大多数人来说,它已经足够让你在黑漆漆的网络里,一眼认出对面那台机器的大致模样了。nmap探测操作系统
-O参数跑完,屏幕上跳出“Linux 2.6.18”的系统字样。我盯着那行输出愣了几秒——那台设备刷的探测是OpenWrt,内核版本号分毫不差。操作这就是系统nmap操作系统探测的威力:它不靠 banners,不靠端口服务自报家门,探测而是操作像老练的侦探,从网络协议的系统细微指纹里反推出对方的底细。TTL 模块把所有出站包的 TTL 改成固定值,再配合内核参数调整窗口缩放因子,就能让 nmap 误判成 Windows。网上甚至有现成的“OS 伪装”脚本,专门用来糊弄这类扫描。所以做渗透测试时,nmap 的结果只能当参考,真要确认系统,还得结合开放端口、服务版本和实际漏洞利用的行为特征。-O 和 -sV(版本探测)一起用,先扫出操作系统,再针对性地查漏洞。有一次同事怀疑内网有台挖矿机,nmap 扫出操作系统是“Linux 3.10”,端口 3333 开着,服务版本显示“XMRig”。两相对照,直接定位到那台被入侵的 CentOS 服务器,整个过程不到两分钟。
-
上一篇
-
下一篇