linux nmap命令

重要提醒: 仅对您拥有合法授权的主机和网络进行扫描。未经授权的网络扫描可能违反法律或服务条款。

一、Nmap 简介

Nmap(Network Mapper)是一个开源的网络发现和安全审计工具。它用于:

  • 网络发现和主机探测
  • 端口扫描和服务检测
  • 操作系统和版本检测
  • 漏洞扫描和安全评估
  • 网络映射和库存管理

二、基本语法

nmap [扫描类型] [选项] {目标规范}

目标可以是:

  • 单个 IP:192.168.1.1
  • IP 范围:192.168.1.1-100
  • CIDR 表示:192.168.1.0/24
  • 主机名:example.com
  • 文件中的目标列表:-iL targets.txt

三、扫描类型

扫描类型 命令选项 说明
TCP SYN 扫描 -sS 默认扫描方式,半开放扫描
TCP Connect 扫描 -sT 完全连接扫描
UDP 扫描 -sU UDP 端口扫描
TCP ACK 扫描 -sA ACK 标志扫描,用于防火墙规则探测
Window 扫描 -sW TCP 窗口扫描
Maimon 扫描 -sM FIN/ACK 扫描
FIN 扫描 -sF TCP FIN 扫描
Xmas 扫描 -sX TCP Xmas Tree 扫描(FIN, PSH, URG)
Null 扫描 -sN 无标志位扫描
Idle 扫描 -sI zombie_host 僵尸主机扫描,隐蔽扫描
IP 协议扫描 -sO IP 协议扫描

四、常用选项

选项 说明
-p 指定端口范围,如 -p 80, -p 1-1000, -p 22,80,443
-F 快速扫描(100个常用端口)
-p- 扫描所有 65535 个端口
-O 操作系统检测
-sV 服务/版本检测
-A 全面扫描(OS检测+版本检测+脚本扫描+traceroute)
-T0-T5 时序模板(0=最慢,5=最快)
-n 不进行 DNS 解析
-R 总是进行 DNS 解析
--dns-servers 指定 DNS 服务器
-6 启用 IPv6 扫描
-v / -vv 详细输出 / 更详细输出
-oN 普通格式输出到文件
-oX XML 格式输出到文件
-oG Grepable 格式输出到文件
-oS 脚本小子格式输出
-oA 所有格式输出到文件
--script 使用 NSE 脚本
-Pn 跳过主机发现,将所有主机视为在线
-PS TCP SYN ping
-PA TCP ACK ping
-PE ICMP echo ping

五、常用扫描实例

1. 基本扫描

# 扫描单个主机
nmap 192.168.1.1

# 扫描多个主机
nmap 192.168.1.1 192.168.1.2 192.168.1.3

# 扫描子网
nmap 192.168.1.0/24

# 扫描IP范围
nmap 192.168.1.1-100

# 从文件读取目标
nmap -iL targets.txt

2. 端口扫描

# 扫描特定端口
nmap -p 80 192.168.1.1

# 扫描端口范围
nmap -p 1-1000 192.168.1.1

# 扫描多个特定端口
nmap -p 22,80,443,8080 192.168.1.1

# 扫描所有端口(慢)
nmap -p- 192.168.1.1

# 快速扫描(100个常用端口)
nmap -F 192.168.1.1

3. 服务版本检测

# 服务版本检测
nmap -sV 192.168.1.1

# 增强版本检测
nmap -sV --version-intensity 9 192.168.1.1

# 轻量级版本检测
nmap -sV --version-light 192.168.1.1

# 全面检测(包括RPC)
nmap -sV -sR 192.168.1.1

4. 操作系统检测

# 操作系统检测
nmap -O 192.168.1.1

# 操作系统检测(更积极)
nmap -O --osscan-guess 192.168.1.1

# 操作系统和服务版本检测
nmap -A 192.168.1.1

5. UDP 扫描

# UDP端口扫描(较慢)
nmap -sU 192.168.1.1

# UDP常用端口扫描
nmap -sU -p 53,67,68,69,123,161 192.168.1.1

# UDP扫描特定端口
nmap -sU -p 1-100 192.168.1.1

6. 隐蔽扫描

# TCP SYN 扫描(默认,半开放)
nmap -sS 192.168.1.1

# TCP FIN 扫描
nmap -sF 192.168.1.1

# TCP Xmas 扫描
nmap -sX 192.168.1.1

# TCP Null 扫描
nmap -sN 192.168.1.1

# TCP ACK 扫描(防火墙规则探测)
nmap -sA 192.168.1.1

# Idle 扫描(僵尸扫描)
nmap -sI zombie_host 192.168.1.1

7. 输出格式

# 普通文本输出
nmap -oN scan.txt 192.168.1.1

# XML 格式输出
nmap -oX scan.xml 192.168.1.1

# Grepable 格式输出
nmap -oG scan.gnmap 192.168.1.1

# 所有格式输出
nmap -oA scan_results 192.168.1.1

# 同时输出到屏幕和文件
nmap -v -oN scan.txt -oX scan.xml 192.168.1.1

六、Nmap 脚本引擎(NSE)

Nmap 脚本引擎允许用户编写和运行脚本来完成更高级的网络发现任务。

1. 脚本分类

脚本类别 说明
auth 身份认证相关
broadcast 网络广播
brute 暴力破解
default 默认脚本(-sC
discovery 服务发现
dos 拒绝服务测试
exploit 漏洞利用
external 外部数据源
fuzzer 协议模糊测试
intrusive 侵入性脚本
malware 恶意软件检测
safe 安全脚本
version 版本检测增强
vuln 漏洞检测

2. 脚本使用示例

# 使用默认脚本(等价于 -sC)
nmap -sC 192.168.1.1

# 使用特定脚本
nmap --script http-title 192.168.1.1

# 使用脚本类别
nmap --script "default or safe" 192.168.1.1

# 使用多个脚本
nmap --script "http-headers,http-title" 192.168.1.1

# 排除脚本类别
nmap --script "not intrusive" 192.168.1.1

# 脚本参数
nmap --script "smb-enum-users" --script-args smbuser=admin,smbpass=password 192.168.1.1

# 常见脚本示例
nmap --script ssh-brute 192.168.1.1
nmap --script http-sql-injection 192.168.1.1
nmap --script smb-vuln-ms17-010 192.168.1.1
nmap --script ssl-heartbleed 192.168.1.1
nmap --script dns-brute 192.168.1.1

七、主机发现技术

# 跳过主机发现(假设所有主机都在线)
nmap -Pn 192.168.1.1

# TCP SYN Ping
nmap -PS22,80,443 192.168.1.1

# TCP ACK Ping
nmap -PA22,80,443 192.168.1.1

# UDP Ping
nmap -PU53,161 192.168.1.1

# ICMP Echo Ping
nmap -PE 192.168.1.1

# ICMP Timestamp Ping
nmap -PP 192.168.1.1

# ICMP Address Mask Ping
nmap -PM 192.168.1.1

# IP 协议 Ping
nmap -PO2,4,6 192.168.1.1

# ARP Ping(局域网)
nmap -PR 192.168.1.1

# 多种Ping组合
nmap -PE -PS22,443 -PA80 -PU161 192.168.1.1

八、扫描时序和性能

# 时序模板(0=最慢,5=最快)
nmap -T0 192.168.1.1  # 偏执狂模式
nmap -T1 192.168.1.1  # 鬼祟模式
nmap -T2 192.168.1.1  # 文雅模式
nmap -T3 192.168.1.1  # 普通模式(默认)
nmap -T4 192.168.1.1  # 积极模式
nmap -T5 192.168.1.1  # 疯狂模式

# 自定义时序参数
nmap --max-retries 2 192.168.1.1
nmap --min-rate 100 192.168.1.1
nmap --max-rate 1000 192.168.1.1
nmap --scan-delay 100ms 192.168.1.1
nmap --max-scan-delay 2s 192.168.1.1

九、防火墙/IDS 规避技术

# 数据包分段
nmap -f 192.168.1.1

# 指定MTU
nmap --mtu 16 192.168.1.1

# 欺骗源地址
nmap -S 192.168.1.99 -e eth0 192.168.1.1

# 源端口欺骗
nmap --source-port 53 192.168.1.1

# MAC地址欺骗
nmap --spoof-mac 00:11:22:33:44:55 192.168.1.1

# 使用诱饵主机
nmap -D RND:10 192.168.1.1
nmap -D decoy1,decoy2,decoy3,ME 192.168.1.1

# 随机化主机顺序
nmap --randomize-hosts 192.168.1.0/24

# 随机化端口顺序
nmap --randomize-ports 192.168.1.1

# 发送坏校验和
nmap --badsum 192.168.1.1

十、实用扫描示例

1. 完整网络审计扫描

nmap -A -T4 -p- 192.168.1.0/24 -oA network_audit

2. Web 服务器扫描

nmap -sV -p 80,443,8080,8443 --script "http-*" 192.168.1.1

3. 数据库服务器扫描

nmap -sV -p 1433,1521,3306,5432 --script "mysql-*,mssql-*" 192.168.1.1

4. 邮件服务器扫描

nmap -sV -p 25,110,143,465,587,993,995 --script "smtp-*,pop3-*,imap-*" 192.168.1.1

5. SMB/文件共享扫描

nmap -sV -p 139,445 --script "smb-*" 192.168.1.1

6. SSL/TLS 扫描

nmap -sV -p 443,465,993,995 --script "ssl-*" 192.168.1.1

7. 路由器/网络设备扫描

nmap -sV -p 22,23,80,443,161,162 --script "snmp-*,router-*" 192.168.1.1

十一、Nmap 结果分析

1. 端口状态说明

状态 说明
open 端口开放,有应用程序在此端口上接受连接
closed 端口关闭,但主机可访问
filtered 端口被防火墙或过滤器阻止,无法确定状态
unfiltered 端口可访问,但无法确定开放还是关闭
open|filtered 无法确定端口是开放还是被过滤
closed|filtered 无法确定端口是关闭还是被过滤

2. 常用输出分析命令

# 从Grepable输出中提取开放端口
grep "open" scan.gnmap

# 提取特定服务的开放端口
grep "80/open" scan.gnmap

# 统计开放端口数量
grep -c "open" scan.gnmap

# 从XML输出中提取信息
xmlstarlet sel -t -m "//port" -v "@portid" -n scan.xml

# 使用nmap-parse-output工具
nmap-parse-output scan.xml open-ports

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

法律与道德提醒
  • 仅在您拥有合法授权的情况下扫描目标网络
  • 不要扫描互联网上的随机主机
  • 了解并遵守当地法律和法规
  • 使用Nmap进行渗透测试前必须获得书面授权
  • 尊重隐私和网络安全
  • 负责任地披露发现的漏洞

1. 合法使用场景

  • 扫描自己的网络和设备
  • 获得书面授权的渗透测试
  • 网络安全教学和研究
  • 系统管理和网络监控
  • 漏洞评估和合规检查

2. 扫描优化建议

性能优化技巧
  • 使用 -T4 时序模板提高扫描速度
  • 使用 --min-rate--max-rate 控制数据包速率
  • 优先扫描常用端口(-F
  • 使用并行扫描(Zenmap GUI支持)
  • 避免不必要的脚本扫描
  • 合理设置超时和重试次数

十三、Nmap 相关工具

工具 说明
Zenmap Nmap 的官方图形界面
ndiff 比较两次扫描结果的差异
ncat 增强版的 netcat,包含在 Nmap 中
nping 网络数据包生成工具
nmap-parse-output Nmap 输出解析工具
Masscan 高速端口扫描器
RustScan 现代化的快速端口扫描器