Nmap 端口扫描的完整使用指南
Nmap 是什么
Nmap(Network Mapper)是一款免费开源的网络探索和安全审计工具。在渗透测试流程中,它是侦察阶段的主力工具——快速发现目标主机开放的端口、运行的服务、操作系统类型,为后续漏洞评估提供基础情报。
四种最常用的扫描方式
| 命令 | 类型 | 特点 |
|---|---|---|
nmap -sS 192.168.1.0/24 | SYN 扫描 | 默认,不完成 TCP 握手,隐蔽且快 |
nmap -sT 192.168.1.0/24 | Connect 扫描 | 完成完整 TCP 握手,最准确但易被检测 |
nmap -sU 192.168.1.100 | UDP 扫描 | 扫描 UDP 端口,慢(因为 UDP 无状态) |
nmap -A 192.168.1.100 | 全功能扫描 | OS 识别 + 版本检测 + 默认脚本,信息最全 |
常用参数
-p 80,443,8080—— 扫描指定端口-p-—— 扫描全部 65535 个端口-Pn—— 跳过主机发现(目标可能禁 ICMP)-T4—— 时间模板(T0 最慢最隐蔽,T5 最快最激进)-oN result.txt—— 保存普通格式结果-oX result.xml—— 保存 XML 格式(方便后续导入 MSF 等工具)--script default—— 运行默认 NSE 脚本
NSE 脚本引擎
Nmap 最强大的特性是 Nmap Scripting Engine(NSE)——超过 600 个 Lua 脚本可以做更深层的检测:
# 扫描 SMB 漏洞(永恒之蓝等)
nmap --script smb-vuln* -p 445 192.168.1.0/24
# 扫描 Log4j 漏洞
nmap --script http-log4shell -p 80,443 192.168.1.0/24
# 获取 SMB 共享列表(无需认证)
nmap --script smb-enum-shares -p 445 192.168.1.100
# 暴力破解 SSH
nmap --script ssh-brute 192.168.1.100
输出解读示例
PORT STATE SERVICE VERSION
21/tcp open ftp vsftpd 3.0.3
22/tcp open ssh OpenSSH 8.2p1 Ubuntu 4ubuntu0.5
80/tcp open http Apache httpd 2.4.41
443/tcp open ssl/http Apache httpd 2.4.41
open—— 端口开放,有程序监听closed—— 端口关闭,无程序监听(主机可达)filtered—— 端口被防火墙屏蔽VERSION列是版本信息,直接关联是否有已知漏洞
图形化界面 Zenmap
Kali 自带 Zenmap(zenmap 命令),是 Nmap 的官方 GUI 前端。可以保存扫描模板、可视化网络拓扑、合并多次扫描结果。适合扫描量较大时使用。
注意事项
- SYN 扫描需要 root 权限(因为要发原始 TCP 包)
- 大规模扫描前先小范围测试,避免被 IPS/IDS 标记
- 某些目标的防火墙会用"全端口 filtered"策略——此时需要换用其他方式(如 ARP 扫描、ICMP 时间戳请求)
- 扫描速度
-T4通常是最佳平衡点,T5 在企业网络里容易丢包