Linux nmap 命令完全指南:网络扫描与安全审计从入门到精通

Linux nmap 命令完全指南:网络扫描与安全审计从入门到精通

Someone Lv5

一、nmap 是什么?

nmap(Network Mapper)是 Linux/Unix 平台下最著名的网络发现和安全扫描工具。它通过发送原始 IP 数据包来探测网络中哪些主机在线、开放了哪些端口、运行着什么服务及操作系统版本。无论是系统管理员做资产盘点,还是安全工程师做漏洞评估,nmap 都是不可或缺的瑞士军刀。

核心能力

nmap 提供六大核心功能:

功能说明关键选项
主机发现探测目标 IP 范围内哪些主机在线-sn(Ping 扫描)
端口扫描扫描目标主机开放的 TCP/UDP 端口-sS(TCP SYN)、-sT(TCP Connect)
服务/版本探测识别端口上运行的服务和应用版本-sV
操作系统识别通过 TCP/IP 指纹猜测目标操作系统-O
脚本扩展用 NSE(Nmap Scripting Engine)执行漏洞检测、服务枚举等-sC(默认脚本)、--script
网络拓扑发现绘制目标网络的路由路径--traceroute

二、安装方法

Ubuntu/Debian 系列

1
2
sudo apt update
sudo apt install nmap -y

RHEL/CentOS/Fedora

1
2
sudo dnf install nmap -y        # Fedora / RHEL 8+
sudo yum install nmap -y # CentOS 7

源码编译(最新版本)

1
2
3
4
5
6
wget https://nmap.org/dist/nmap-7.95.tar.bz2
tar xjf nmap-7.95.tar.bz2
cd nmap-7.95
./configure
make -j$(nproc)
sudo make install

安装后验证版本:

1
nmap --version

三、基础用法

1. 指定扫描目标

nmap 支持多种目标指定方式:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 单个 IP
nmap 192.168.1.1

# CIDR 子网
nmap 192.168.1.0/24

# IP 段
nmap 192.168.1.1-100

# 域名
nmap example.com

# 从文件读取目标(每行一个)
nmap -iL targets.txt

# 随机排除
nmap 192.168.1.0/24 --exclude 192.168.1.1,192.168.1.2

2. 主机发现(Ping 扫描)

-sn 选项仅做主机发现,不扫描端口,速度极快:

1
2
# 快速发现整个子网的在线主机(等价于 ping sweep)
nmap -sn 192.168.1.0/24

输出示例:

1
2
3
4
5
Nmap scan report for 192.168.1.1
Host is up (0.0012s latency).
Nmap scan report for 192.168.1.10
Host is up (0.0023s latency).
Nmap done: 256 IP addresses (5 hosts up) scanned in 3.45 seconds

3. 默认扫描

不带任何选项时,nmap 对目标执行默认扫描(-sS TCP SYN 扫描 1000 个常用端口):

1
nmap scanme.nmap.org

四、端口扫描技术

TCP SYN 扫描(半开扫描)- -sS

最常用的扫描方式,速度快、隐蔽性强。只发送 SYN 包,不完成三次握手:

1
sudo nmap -sS 192.168.1.10

需要 root 权限,因为涉及构造原始数据包。收到 SYN/ACK 则端口开放,收到 RST 则关闭。

TCP Connect 扫描 - -sT

完成完整的三次握手,不需要 root 权限,但速度较慢且更容易被日志记录:

1
nmap -sT 192.168.1.10

UDP 扫描 - -sU

扫描 UDP 端口(如 DNS 53、SNMP 161),速度较慢,建议配合版本探测:

1
sudo nmap -sU 192.168.1.10

端口范围指定

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 扫描特定端口
nmap -p 80,443,8080 192.168.1.10

# 扫描范围
nmap -p 1-1024 192.168.1.10

# 扫描所有 65535 个端口(耗时较长)
nmap -p- 192.168.1.10

# 按服务名扫描
nmap -p http,https,ssh 192.168.1.10

# 扫描前 N 个最常用端口
nmap --top-ports 100 192.168.1.10

扫描技术对比

扫描类型选项是否需要 root速度隐蔽性适用场景
TCP SYN-sS日常首选
TCP Connect-sT无 root 权限时
UDP-sUUDP 服务检测
TCP FIN-sF极高绕过防火墙
TCP Null-sN极高绕过防火墙
TCP ACK-sA防火墙规则探测
TCP Window-sW检测 RST 细节差异
TCP Maimon-sM特定系统探测

五、服务与版本探测 - -sV

识别端口上运行的具体服务和应用版本:

1
2
3
4
5
6
7
8
# 基础版本探测
nmap -sV 192.168.1.10

# 提高探测强度(0-9,默认 7,越大越准确但越慢)
nmap -sV --version-intensity 9 192.168.1.10

# 轻量版本探测
nmap -sV --version-light 192.168.1.10

输出示例:

1
2
3
4
5
PORT     STATE SERVICE    VERSION
22/tcp open ssh OpenSSH 8.9p1 Ubuntu 3ubuntu0.6
80/tcp open http nginx 1.24.0
443/tcp open http nginx 1.24.0
3306/tcp open mysql MySQL 8.0.35-0ubuntu0.22.04.1

六、操作系统识别 - -O

通过 TCP/IP 协议栈指纹推测目标操作系统:

1
sudo nmap -O 192.168.1.10

输出示例:

1
2
3
4
Device type: general purpose
Running: Linux 5.X
OS CPE: cpe:/o:linux:linux_kernel:5
OS details: Linux 5.10 - 5.19

七、合并扫描(常用组合)

最常用的全功能扫描组合:

1
2
3
4
5
6
7
8
# 全面扫描:SYN 扫描 + 版本探测 + 默认脚本 + OS 识别 + 路由追踪
sudo nmap -sS -sV -sC -O --traceroute 192.168.1.10

# 快速扫描
sudo nmap -T4 -F 192.168.1.10

# 详细输出
sudo nmap -sS -sV -sC -O -v 192.168.1.10

八、NSE 脚本引擎

Nmap Scripting Engine(NSE)是 nmap 最强大的扩展能力,用 Lua 语言编写,目前已包含 600+ 个脚本。

常用脚本分类

脚本类别说明示例脚本
auth认证相关检测ftp-anon.nse, ssh-brute.nse
broadcast广播协议发现broadcast-ping.nse, dhcp-discover.nse
brute暴力猜解http-brute.nse, mysql-brute.nse
default默认脚本集(-sC)http-title.nse, ssh-hostkey.nse
discovery服务/信息发现dns-brute.nse, nbstat.nse
dos拒绝服务测试http-slowloris.nse(需谨慎)
exploit漏洞利用http-shellshock.nse
external外部数据查询whois-domain.nse, http-geolocation.nse
fuzzer模糊测试dns-fuzz.nse
intrusive侵入性测试http-sql-injection.nse
malware恶意软件检测http-malware-host.nse
safe安全脚本(推荐)ssl-enum-ciphers.nse
version版本探测增强skypev2-version.nse
vuln漏洞检测ssl-heartbleed.nse

使用示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 运行默认安全脚本集(-sC 等同于 --script=default)
sudo nmap -sC 192.168.1.10

# 运行特定类别
sudo nmap --script=vuln 192.168.1.10

# 运行指定脚本
sudo nmap --script=http-title,ssl-enum-ciphers 192.168.1.10

# 带脚本参数
sudo nmap --script=http-brute --script-args userdb=users.txt,passdb=pass.txt 192.168.1.10

# 查看脚本列表
ls /usr/share/nmap/scripts/

经典安全检测脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# Heartbleed 漏洞检测
sudo nmap -p 443 --script=ssl-heartbleed example.com

# SSL/TLS 弱密码检测
sudo nmap -p 443 --script=ssl-enum-ciphers example.com

# DNS 区域传输检测
sudo nmap --script=dns-zone-transfer -p 53 example.com

# HTTP 方法检测
sudo nmap -p 80 --script=http-methods --script-args http-methods.url-path=/test 192.168.1.10

# SMB 漏洞检测
sudo nmap -p 445 --script=smb-vuln-* 192.168.1.10

九、输出格式

nmap 支持多种输出格式,便于保存和分析:

1
2
3
4
5
6
7
8
9
10
11
# 标准输出(-oN)
sudo nmap -sS -sV -oN scan.txt 192.168.1.10

# XML 输出(-oX,适合程序解析)
sudo nmap -sS -sV -oX scan.xml 192.168.1.10

# Grepable 输出(-oG,适合 grep 处理)
sudo nmap -sS -oG scan.gnmap 192.168.1.0/24

# 三种格式同时输出
sudo nmap -sS -oA myscan 192.168.1.10

十、实战场景

场景 1:内网资产盘点

快速发现公司内网所有在线主机及其开放服务:

1
2
3
4
5
6
7
8
# 先发现在线主机
sudo nmap -sn 10.0.0.0/24 -oG online.txt

# 提取在线 IP
grep Up online.txt | awk '{print $2}' > targets.txt

# 对在线主机做全面扫描
sudo nmap -sS -sV -sC -T4 -iL targets.txt -oA assets-scan

场景 2:Web 服务器安全审计

1
sudo nmap -p 80,443 -sV --script=http-headers,http-title,http-methods,ssl-enum-ciphers example.com

场景 3:防火墙规则探测

用 ACK 扫描判断防火墙是否允许特定端口出口:

1
2
3
4
5
# ACK 扫描:未过滤端口返回 RST,过滤端口无响应
sudo nmap -sA -p 80,443,22 192.168.1.1

# 结合 FIN、Null 扫描绕过状态检测防火墙
sudo nmap -sF -sN -p 80,443 192.168.1.1

场景 4:全网漏洞快速扫描

1
2
# 分段扫描大子网,建议配合 -T4 加快速度
sudo nmap --script=vuln -T4 -oA vuln-scan 10.0.1.0/24

场景 5:网速与延迟测试

1
2
3
4
5
6
# 使用 ping 模式测试目标网络延迟
sudo nmap -sn -PE -PP -PS80,443,22 -PA80,443,22 192.168.1.10

# 实际上 nmap 本身就自带 -T 选项调节速度
sudo nmap -T4 -F 192.168.1.10 # 快速
sudo nmap -T5 -F 192.168.1.10 # 疯狂模式(慎用)

十一、扫描速度控制

nmap 通过 -T 选项提供六种时序模板:

模板名称说明适用场景
-T0Paranoid每次发包间隔 5 分钟躲避 IDS
-T1Sneaky间隔 15 秒很隐蔽
-T2Polite间隔 0.4 秒,减少带宽消耗优雅模式
-T3Normal默认模式,自动并行日常使用
-T4Aggressive假设网络快且可靠,大幅加速局域网快速扫描
-T5Insane极限速度,可能丢包极快局域网

进阶参数调优:

1
2
3
4
5
6
7
8
9
10
11
# 调整并发
--min-hostgroup 64 # 最小并行扫描主机数
--max-hostgroup 256 # 最大并行扫描主机数
--min-parallelism 10 # 最小并行探针数
--max-scan-delay 100ms # 最大发包间隔

# 重试与超时
--max-retries 2 # 最大重试次数
--host-timeout 30m # 单主机超时
--initial-rtt-timeout 100ms
--max-rtt-timeout 500ms

十二、安全与法律注意事项

使用 nmap 扫描他人网络时,请在法律允许范围内操作:

1
2
3
4
5
6
7
1. 未经授权扫描他人网络在多数国家和地区属于违法行为
2. 了解当地《网络安全法》《计算机信息系统安全保护条例》等法律法规
3. Nmap.org 提供 scanme.nmap.org 作为合法的测试目标
4. 建议在自己的 VPS 或内网环境中练习
5. 使用 -sS(SYN 扫描)这样的隐蔽扫描并不能避免法律责任
6. 企业环境下需获得书面的渗透测试授权
7. 扫描结果应妥善保管,不得泄露他人网络拓扑信息

十三、常见问题排查

问题可能原因解决方法
扫描结果显示所有端口 filtered防火墙丢弃了探测包尝试 -sT(Connect 扫描)或 -Pn(跳过主机发现)
sudo 后仍报权限错误尝试在 Docker 中跑 nmap添加 --privileged 或 --cap-add=NET_RAW,SYS_ADMIN
UDP 扫描极慢UDP 无连接的固有特性配合 --host-timeout 限制单机用时,缩小端口范围
版本探测耗时过长--version-intensity 默认 7使用 --version-light 或 -sV 配合 -T4
扫描大子网卡死默认并发数不够使用 -T4 --min-hostgroup 64
IP 伪装扫描被反制-D 诱饵扫描可能被识别使用代理扫描 --proxies
WSL 中无法使用 SYN 扫描WSL 缺少原始套接字支持改用 virtualbox 完整 Linux 或使用 -sT

十四、命令速查表

场景命令
Ping 扫描子网nmap -sn 192.168.1.0/24
快速扫描 Top 100 端口sudo nmap -F 192.168.1.10
全端扫描(65535 个)sudo nmap -p- 192.168.1.10
全面信息收集sudo nmap -sS -sV -sC -O 192.168.1.10
漏洞扫描sudo nmap --script=vuln 192.168.1.10
Web 安全检测sudo nmap -p 80,443 --script=http-*,ssl-* example.com
版本探测sudo nmap -sV --version-light 192.168.1.10
OS 识别sudo nmap -O --osscan-guess 192.168.1.10
防火墙规则探测sudo nmap -sA 192.168.1.1
诱饵扫描(隐藏源 IP)sudo nmap -D decoy1,decoy2,ME 192.168.1.10
从文件读取目标 + 全输出sudo nmap -iL targets.txt -oA result
排除特定 IPsudo nmap 10.0.0.0/24 --exclude 10.0.0.1

十五、与其他工具配合

nmap 的 XML 输出可以配合其他工具做可视化分析:

1
2
3
4
5
6
7
8
9
10
11
# 配合 xsltproc 生成 HTML 报告
sudo nmap -sS -sV -oX scan.xml 192.168.1.0/24
xsltproc scan.xml -o scan.html

# 配合 ndiff 做前后两次扫描的差异对比
nmdb -f scan1.xml
nmdb -f scan2.xml
ndiff scan1.xml scan2.xml

# 配合 Zenmap(nmap 的 GUI 版本)
sudo apt install zenmap # 图形界面,适合新手

总结

nmap 是每个 Linux 运维人员和网络安全从业者必备的工具。从简单的 Ping 扫描到复杂的 NSE 脚本引擎,它的能力覆盖了网络发现、服务探测、漏洞检测的方方面面。建议在日常运维中将 nmap 纳入资产管理流程,定期对内网做资产盘点和安全审计。但要始终记住:nmap 是一把利器,请只在授权范围内使用。

本文由AI辅助生成,内容仅供参考

  • 标题: Linux nmap 命令完全指南:网络扫描与安全审计从入门到精通
  • 作者: Someone
  • 创建于 : 2026-06-12 18:06:00
  • 更新于 : 2026-06-18 08:39:57
  • 链接: https://demo-blog.qusite.cn/2026-06-12-nmap-command-guide/
  • 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。