一、Nmap介绍
Nmap被称为"网络安全界的瑞士军刀",是每一位从业者必须掌握的核心工具。但在学习过程中发现,仅仅会敲命令是不够的,理解背后的原理才能真正用好它。
本文从零开始梳理Nmap的核心知识点,包含:
二、Nmap前置知识
2.1 IP地址与二进制(理解 /24 的关键)
IP地址 192.168.1.5 在底层实际是32位二进制:
- 192.168.1.5 = 11000000.10101000.00000001.00000101
复制代码
| 概念 | 说明 |
|---|
| 8位二进制 | 每组数字占8位,范围0-255 | | 32位 | 4组 × 8位 = 32位(IPv4的由来) | | /24 | 固定前24位(前3组),最后1组可变 → 256个地址 | | 可用IP | .0是网络地址,.255是广播地址,实际可用1-254 |
2.2 TCP三次握手(理解端口状态的关键)
- 客户端 → SYN → 服务器
- 客户端 ← SYN-ACK ← 服务器
- 客户端 → ACK → 服务器(连接建立)
复制代码
Nmap利用这个原理:
-
收到SYN-ACK → 端口 open
-
收到RST → 端口 closed
-
无回复 → 端口 filtered
2.3 公有IP vs 私有IP
| 类型 | 范围示例 | 说明 |
|---|
| 私有IP | 192.168.x.x, 10.x.x.x | 内网使用,可自由扫描(自有环境) | | 公有IP | 8.8.8.8, 任意互联网IP | 必须获得授权才能扫描 |
三、Nmap核心命令分类速查
3.1 目标管理
| 命令 | 作用 | 示例 |
|---|
| nmap 192.168.1.1 | 单IP扫描 | nmap 192.168.1.1 | | nmap 192.168.1.0/24 | 扫整个C段 | nmap 192.168.1.1-254 | | nmap 192.168.1.1-50 | 扫连续IP段 | nmap 192.168.1.1-50 | | nmap -iL targets.txt | 从文件读目标 | 适合批量扫描 | | nmap --exclude 192.168.1.10 | 排除特定IP | 跳过指定目标 |
3.2 主机发现
| 命令 | 作用 | 适用场景 |
|---|
| nmap -sn 192.168.1.0/24 | 只发现在线主机 | 内网资产盘点 | | nmap -Pn 192.168.1.1 | 跳过主机发现 | 目标禁ping时 | | nmap -PS80,443 192.168.1.0/24 | TCP SYN发现 | 绕过ICMP过滤 | | nmap -PA80 192.168.1.0/24 | TCP ACK发现 | 更隐蔽的绕过 | | nmap -PE 192.168.1.0/24 | ICMP发现 | 传统ping |
3.3 端口扫描
| 命令 | 作用 | 原理 | 权限 |
|---|
| nmap -sS 192.168.1.1 | SYN半开扫描 | 发SYN,收SYN-ACK回RST | root | | nmap -sT 192.168.1.1 | TCP全连接 | 完成三次握手 | 普通用户 | | nmap -sU 192.168.1.1 | UDP扫描 | 慢,用于DNS/SNMP等 | root | | nmap -p 80,445 192.168.1.1 | 指定端口 | 只扫特定端口 | | | nmap -p- 192.168.1.1 | 全端口扫描 | 1-65535(耗时较长) | | | nmap -F 192.168.1.1 | 快速扫描 | 只扫top 100端口 | | | nmap --top-ports 200 | TOP 200端口 | 扫最常用的200个 | |
3.4 服务与系统识别
| 命令 | 作用 | 输出示例 |
|---|
| nmap -sV 192.168.1.1 | 服务版本探测 | Apache httpd 2.4.41 | | nmap -O 192.168.1.1 | 操作系统识别 | Windows 7 SP1 | | nmap -A 192.168.1.1 | 全面扫描 | -O + -sV + -sC + traceroute |
3.5 脚本引擎(NSE)
| 命令 | 作用 | 说明 |
|---|
| nmap --script vuln 192.168.1.1 | 漏洞扫描 | 运行所有漏洞检测脚本 | | nmap --script smb-vuln-ms17-010 -p 445 192.168.1.1 | 永恒之蓝检测 | 检测MS17-010 | | nmap --script smb-enum-shares -p 445 192.168.1.1 | 枚举共享 | 查看共享文件夹 | | nmap --script smb-protocols -p 445 192.168.1.1 | SMB版本探测 | 确认是否支持SMBv1 |
3.6 输出与速度
| 命令 | 作用 |
|---|
| nmap -T4 192.168.1.1 | 时间模板(T0最慢-T5最快) | | nmap -oN result.txt | 保存为标准输出 | | nmap -oX result.xml | 保存为XML | | nmap -v | 显示详细扫描过程 | | nmap --open | 只显示开放端口 |
四、实战案例:内网靶机扫描全过程
环境
步骤1:基础端口扫描
关键输出:
- PORT STATE SERVICE
- 445/tcp open microsoft-ds
- 135/tcp open msrpc
- 139/tcp open netbios-ssn
- ...
- Not shown: 987 closed tcp ports (reset)
复制代码
解读:
步骤2:操作系统识别
关键输出:
- OS details: Microsoft Windows Vista SP2 or Windows 7 or Windows Server 2008 R2
复制代码
结合开放端口(554/2869/5357等) → 极大概率是 Windows 7
步骤3:永恒之蓝漏洞检测
- nmap --script smb-vuln-ms17-010 -p 445 192.168.34.133
复制代码
关键输出:
- | VULNERABLE:
- | Remote Code Execution vulnerability in Microsoft SMBv1 servers (ms17-010)
- | State: VULNERABLE
- | IDs: CVE:CVE-2017-0143
复制代码
✅ 确认存在MS17-010漏洞
步骤4:进一步信息收集
- # 查看SMB版本
- nmap --script smb-protocols -p 445 192.168.34.133
-
- # 枚举共享文件夹
- nmap --script smb-enum-shares -p 445 192.168.34.133
-
- # 枚举系统用户
- nmap --script smb-enum-users -p 445 192.168.34.133
复制代码
五、避坑指南与学习建议
5.1 常见误区
| 误区 | 正解 |
|---|
| 只背命令不理解原理 | 理解IP/TCP才能举一反三 | | 盲目相信OS识别结果 | Nmap是"猜测",需结合端口佐证 | | UDP扫描嫌慢就放弃 | UDP服务(DNS/SNMP)很重要 | | 扫描不通就放弃 | 先试 -Pn 绕过ICMP过滤 |
5.2 安全提醒
5.3 深入学习方向
六、常用命令速记表
| 用途 | 命令 |
|---|
| 扫C段 | nmap 192.168.1.0/24 | | 只发现在线 | nmap -sn 192.168.1.0/24 | | 跳过ping | nmap -Pn 192.168.1.1 | | SYN扫描 | sudo nmap -sS 192.168.1.1 | | 服务版本 | nmap -sV 192.168.1.1 | | 操作系统 | nmap -O 192.168.1.1 | | 全面扫描 | nmap -A 192.168.1.1 | | 永恒之蓝 | nmap --script smb-vuln-ms17-010 -p 445 | | 指定端口 | nmap -p 80,443,8080 | | 全端口 | nmap -p- 192.168.1.1 | | 快速模式 | nmap -T4 192.168.1.1 | | 保存结果 | nmap -oN result.txt |
七、结语
Nmap的学习不是一蹴而就的,但只要掌握了IP/TCP的基础原理,再复杂的命令也能看懂它的本质。
从基础扫描到漏洞检测,Nmap能做的远不止"看开了哪些端口"。希望这份总结能帮各位读者少走弯路,在实际操作中真正用好这个工具。 |