0

0

Nmap操作系统探测技术浅析

星夢妙者

星夢妙者

发布时间:2025-09-05 08:00:30

|

974人浏览过

|

来源于php中文网

原创

对于开源工具的使用,阅读相关文章是有效的学习方法。大多数人都乐于阅读这些文章,因为它们能够快速上手使用工具。然而,对于开源工具的原理,深入阅读官方论文虽然可以,但很少有人愿意花时间,因为效果较慢。通常情况下,掌握工具的使用就足以满足需求。久而久之,可能就磨灭了对技术细节的好奇心。虽然大家都会使用这些工具,但使用效果却各有不同。

我一直计划撰写一系列名为《技术原理》的专题文章。去年的内部日常分享中,老王讲到了“操作系统探测技术分享”,这恰好与我的想法不谋而合。在征得他的同意后,我决定撰写并分享这篇文章。

01

本文概要

无论是在渗透测试前的信息收集,还是进行安全资产管理,操作系统都是IP的一个重要属性。探测操作系统的方法多种多样,例如通过HIDS读取信息、使用常见命令探测、使用工具扫描等,其中最常见的工具就是Nmap。那么,Nmap的工作原理是什么?它是如何实现精准探测的?本文将通过分析Nmap扫描时发送的数据包和响应,理解其原理。

02

常见OS探测方法

1、使用工具探测

1.1 xprobe参考链接:https://www.php.cn/link/00d4e0aa728e91def3ee7293fcda8670

1.2 nmap参考链接:https://www.php.cn/link/b2b9efa258316b09890cf697c00be8a6

操作系统识别指令:nmap -O|A target

Nmap操作系统探测技术浅析

2、手工命令检测

通过返回信息,手动判断操作系统类型,例如:

2.1 telnet探测

Nmap操作系统探测技术浅析

2.2 ftp探测

Nmap操作系统探测技术浅析

2.3 http get探测

Nmap操作系统探测技术浅析

2.4 ssh探测

Nmap操作系统探测技术浅析

03

Nmap探测OS的优劣势

1、优势

使用简单,功能及文档全面,参数丰富,可以自定义底层文件及脚本;开源友好,广泛使用,通常不会对网络造成压力。

2、不足

受网络环境影响,在NAT环境或有防火墙的环境下,很多信息探测不准确。

04

Nmap探测OS的原理

1、探测原理

不同操作系统在TCP/IP协议栈的实现上略有差异,NMAP会选择3个端口发送一系列探测包到目标地址。根据返回信息进行单元测试,然后形成指纹,并与自带的操作系统指纹库进行对比,最后得出结论:

(1)当匹配到多个操作系统指纹时,以概率的形式列举出可能的操作系统;

(2)当无法匹配到操作系统时,会将操作系统指纹打印出来供用户自定义。

操作系统指纹库nmap-os-db,目前共有5654条操作系统指纹,格式如下:

Nmap操作系统探测技术浅析

其中,3个端口是指:

(1)一个开放的TCP端口:探测到的第一个开放端口;

(2)一个关闭的TCP端口:从1开始的关闭端口,通常看到的就是1;

(3)一个关闭的UDP端口:随机UDP高端端口。

该部分内容,在nmap-os-db文件详解中的操作系统解释的SCAN部分(OT,CT,CU)有讲到。

其中,一系列的探测包是指:

(1)Sequence generation(SEQ,OPS,WIN,T1)

(2)ICMP Echo(IE)

(3)TCP explicit congestion notification(ECN)

(4)UDP(U1)

(5)TCP(T2 - T7)

2、探测流程

nmap -O ip

-> 主机发现 -> 开放端口探测 -> 服务识别 -> 向其中1个开放的TCP端口发送探测包 -> 发送ICMP探测包 -> 向1个开放的TCP端口发送探测包 -> 向1个关闭的UDP端口发送UDP探测包 -> 向1个开放的TCP端口及关闭的TCP端口发送探测包

2.1 主机发现

常规主机发现流程,不详细讲解,需要注意的是同一广播域中的主机发现流程要多一步。

2.2 开放端口探测

向常用的1000个TCP端口(nmap-services中有定义)发送SYN请求,如果收到回应,则认为端口开放。

3.3 服务识别

并非应用识别,这里直接匹配nmap-services中的对应服务,与操作系统中的系统服务相对应:

(1)Linux系统中的/etc/services

(2)Windows系统中的C:\windows\system32\drivers\etc\services

3.4 向1个开放的TCP端口发送探测包

6个用于生成指纹库中的SEQ、OPS、WIN、T1行

以100毫秒的间隔,先后发送6个不包含任何数据,但包含不同TCP选项及滑动窗口的TCP SYN包

Nmap操作系统探测技术浅析

Nmap操作系统探测技术浅析

SEQ:响应包序列分析

(1)SP: ISN序列可预测性指标;

(2)GCD: TCP ISN最大公约数;

(3)ISR: ISN的计数率;

(4)TI CI II: IP ID顺序生成算法;

(5)SS: 共享IP ID序列布尔值;

(6)TS: 时间戳选项算法。

兴泰网络办公系统1.61
兴泰网络办公系统1.61

基于 Internet 的 Web 技术,完全采用B/S 体系结构的网络办公系统。该系统具有安全性高、功能极为强大、可在广域网中使用也可在局域网中使用、也可以同时在局域网和广域网中使用的特点,全傻瓜式安装,无需作复杂配置,界面采用类似windows资源管理器的设计,结构清晰,条理分明,即使不熟悉电脑的人也可很快掌握全部操作。该系统通过在广域网内的广泛试用验证和经专业技术人员的调试、测试,确认具有很

下载

OPS:TCP包可选字段

WIN: 包含6个数据包响应的窗口大小

T1: TCP回复包的字段特征

(1)R: 是否有响应;

(2)DF: 不分片;

(3)T: IP初始生存时间;

(4)TG: 推测的IP生存时间;

(5)W: TCP初始窗口大小;

(6)S: TCP序列号;

(7)A: TCP确认号;

(8)F: TCP Flag;

(9)RD: TCP RST数据校验和。

3.5 发送ICMP探测包

2个用于生成指纹库中的IE行,描述发送ICMP生成的特征:

Packet #7: ICMP Request, IP DF=set, TOS=0, Code=9, ICMP Sn=295, IP ID=random, ICMP ID=random,Payload为120字节数据,填充0x00

Packet #8: ICMP Request, IP DF=not set, TOS=4, Code=0, ICMP Sn=296, IP ID=random,ICMP ID=+1,Payload为150字节数据,填充0x00

其中:

R: 表示是否有响应,两个ICMP包都有响应时才为Y;

DFI: ICMP不分片;

T: IP初始生存时间;

TG: 推测的IP生存时间;

CD: ICMP响应代码。

Sequence number(BE)和Sequence number(LE)区别:内容上只是顺序的不同,而对应的hex值是相同的。通过资料的查找,可以这样理解:

wireshark考虑到window系统与Linux系统发出的ping报文(主要指ping应用字段而非包含IP头的ping包)的字节顺序不一样(windows为LE:little-endian byte order,Linux为BE:big-endian),分别告诉信息,其本质内容是不变的,只是表达形式不同。

3.6 向1个开放的TCP端口发送探测包

1个用于生成指纹库中的ENC(拥塞通知特性):

Packet # 9: TCP SYN: TCP Flag ECN, CWR=set, urgent=0xF7F5, ACK=0, SEQ=random, Window=3, TCP Option: WScale=10, NOP, MSS=1460, SACK, NOP, NOP

Nmap操作系统探测技术浅析

R: 表示是否有响应;

DF: 表示是否分片;

T: 表示IP初始生存时间;

TG: 推测的IP初始生成时间;

W: TCP初始窗口大小;

O: TCP选项;

CC: 明确拥塞通知;

Q: TCP混杂巧合。

3.7 向1个关闭的UDP端口发送探UDP测包

1个用于生成指纹库中的U1行,如下图所示:

Packet #10: UDP, IP ID=0x1042, data=0x43*300

Nmap操作系统探测技术浅析

IPL: IP总长度;

UN: 未使用的端口不可达域非零;

RIPL: 返回的IP包总长度值;

RID: 返回的IP ID;

RIPCK: IP包校验和完整性;

RUCK: UP校验和完整性;

RUD: 返回的UDP数据包完整性。

3.8 向1个开放的TCP端口及关闭的TCP端口发送探测包

3 + 3 = 6个用于生成指纹库中的T2-T7行

Packet #11: T2, TCP null (no flags set) packet with the IP DF bit set and a window field of 128 -> 开放端口

Packet #12: T3, TCP packet with the SYN, FIN, URG, and PSH flags set and a window field of 256. The IP DF bit is not set -> 开放端口

Packet #13: T4, TCP ACK packet with IP DF and a window field of 1024 -> 开放端口

Packet #14: T5, TCP SYN packet without IP DF and a window field of 31337 -> 关闭的端口

Packet #15: T6, TCP ACK packet with IP DF and a window field of 32768 -> 关闭的端口

Packet #16: T7, TCP packet with the FIN, PSH, and URG flags set and a window field of 65535. The IP DF bit is not set -> 关闭的端口

05

高级玩法:精确识别Windows操作系统

1、使用nse脚本探测Windows系统版本(底层原理同2)

nmap --script smb-os-discovery.nse -p 445 127.0.0.1

nmap -sU -sS --script smb-os-discovery.nse -p U:137,T:139 127.0.0.1

Nmap操作系统探测技术浅析

2、使用SMB Session Setup ANDX Requests强制操作系统返回版本信息

参考链接:

SMB_COM_SESSION_SETUP_ANDX (0x73)

https://www.php.cn/link/f87ce61286012c89c54a93e61a88e761

Nmap操作系统探测技术浅析

存在的不足,只支持smb v2.x及其以后的版本(Windows server 2003 R2以后的版本)。

参考资料:

NMAP第一代操作系统探测技术:https://www.php.cn/link/80154d0cf42299d38de5046efc2429a3

NMAP第二代操作系统探测技术:https://www.php.cn/link/b2b9efa258316b09890cf697c00be8a6


热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
c语言中null和NULL的区别
c语言中null和NULL的区别

c语言中null和NULL的区别是:null是C语言中的一个宏定义,通常用来表示一个空指针,可以用于初始化指针变量,或者在条件语句中判断指针是否为空;NULL是C语言中的一个预定义常量,通常用来表示一个空值,用于表示一个空的指针、空的指针数组或者空的结构体指针。

237

2023.09.22

java中null的用法
java中null的用法

在Java中,null表示一个引用类型的变量不指向任何对象。可以将null赋值给任何引用类型的变量,包括类、接口、数组、字符串等。想了解更多null的相关内容,可以阅读本专题下面的文章。

458

2024.03.01

session失效的原因
session失效的原因

session失效的原因有会话超时、会话数量限制、会话完整性检查、服务器重启、浏览器或设备问题等等。详细介绍:1、会话超时:服务器为Session设置了一个默认的超时时间,当用户在一段时间内没有与服务器交互时,Session将自动失效;2、会话数量限制:服务器为每个用户的Session数量设置了一个限制,当用户创建的Session数量超过这个限制时,最新的会覆盖最早的等等。

316

2023.10.17

session失效解决方法
session失效解决方法

session失效通常是由于 session 的生存时间过期或者服务器关闭导致的。其解决办法:1、延长session的生存时间;2、使用持久化存储;3、使用cookie;4、异步更新session;5、使用会话管理中间件。

752

2023.10.18

cookie与session的区别
cookie与session的区别

本专题整合了cookie与session的区别和使用方法等相关内容,阅读专题下面的文章了解更详细的内容。

93

2025.08.19

堆和栈的区别
堆和栈的区别

堆和栈的区别:1、内存分配方式不同;2、大小不同;3、数据访问方式不同;4、数据的生命周期。本专题为大家提供堆和栈的区别的相关的文章、下载、课程内容,供大家免费下载体验。

397

2023.07.18

堆和栈区别
堆和栈区别

堆(Heap)和栈(Stack)是计算机中两种常见的内存分配机制。它们在内存管理的方式、分配方式以及使用场景上有很大的区别。本文将详细介绍堆和栈的特点、区别以及各自的使用场景。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

575

2023.08.10

windows查看端口占用情况
windows查看端口占用情况

Windows端口可以认为是计算机与外界通讯交流的出入口。逻辑意义上的端口一般是指TCP/IP协议中的端口,端口号的范围从0到65535,比如用于浏览网页服务的80端口,用于FTP服务的21端口等等。怎么查看windows端口占用情况呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

788

2023.07.26

C++ 设计模式与软件架构
C++ 设计模式与软件架构

本专题深入讲解 C++ 中的常见设计模式与架构优化,包括单例模式、工厂模式、观察者模式、策略模式、命令模式等,结合实际案例展示如何在 C++ 项目中应用这些模式提升代码可维护性与扩展性。通过案例分析,帮助开发者掌握 如何运用设计模式构建高质量的软件架构,提升系统的灵活性与可扩展性。

9

2026.01.30

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
进程与SOCKET
进程与SOCKET

共6课时 | 0.4万人学习

swoole入门物联网开发与实战
swoole入门物联网开发与实战

共15课时 | 1.2万人学习

swoole项目实战(第二季)
swoole项目实战(第二季)

共15课时 | 1.2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号