Nmap 完整教学与 Linux 指令详解

一、Linux 系统安装与配置

安装命令

bash 复制代码
# Debian/Ubuntu/Kali 系统
sudo apt-get update && sudo apt-get install nmap

# CentOS/RHEL 系统
sudo yum install nmap

# 验证安装
nmap --version
which nmap

权限说明:部分扫描类型(如 SYN 扫描、操作系统检测)需要 root 权限,建议使用 `sudo` 执行。

二、核心语法结构

bash 复制代码
nmap [扫描类型] [选项] {目标地址}

**目标指定方式**:
nmap 192.168.1.1              # 单个IP
nmap example.com              # 域名
nmap 192.168.1.1 192.168.1.2 # 多个IP(空格分隔)
nmap 192.168.1.1-100          # IP范围(1-100)
nmap 192.168.1.0/24           # CIDR网段(整个子网)
nmap -iL targets.txt          # 从文件读取目标列表

三、扫描类型详解(核心指令)

  1. TCP 扫描(最常用)
命令 名称 原理 特点 权限
-sS SYN 半开扫描 发送 SYN 包,收到 SYN/ACK 即判定端口开放 速度快、隐蔽性强 需 root
-sT TCP 全连接扫描 完成三次握手 最准确,但日志会记录 无需 root
-sA ACK 扫描 发送 ACK 包探测防火墙规则 用于检测防火墙状态 需 root
-sF FIN 扫描 发送 FIN 包,无响应则端口开放 仅 Linux,绕过部分防火墙 需 root
-sN Null 扫描 发送所有标志位为 0 的包 极隐蔽,但兼容性差 需 root
-sX Xmas 扫描 FIN/URG/PUSH 标志位置 1 圣诞树包,绕过防火墙 需 root

使用示例:

bash 复制代码
sudo nmap -sS 192.168.1.1     # 标准 SYN 扫描
nmap -sT 192.168.1.1          # 无权限时用全连接扫描
sudo nmap -sF 192.168.1.1 -p 80  # 测试防火墙对 FIN 包的反应
  1. UDP 扫描

`

bash 复制代码
sudo nmap -sU 192.168.1.1     # UDP 扫描(速度慢,需 root)
sudo nmap -sU -p 53,123,161 192.168.1.1  # 指定常见 UDP 端口

特点:UDP 无连接,扫描速度慢,常用于检测 DNS、SNMP 等服务。

  1. 主机发现(Ping 扫描)
bash 复制代码
nmap -sn 192.168.1.0/24       # 仅发现存活主机,不扫描端口
nmap -Pn 192.168.1.1          # 跳过主机发现,直接端口扫描(用于防火墙禁 Ping)
nmap -PS 192.168.1.1          # TCP SYN Ping(默认行为)
nmap -PE 192.168.1.1          # ICMP Echo Ping

应用场景:`-sn` 适合快速清点网络资产;`-Pn` 可绕过禁 Ping 的主机。

四、选项参数大全(按功能分类)

🎯 端口控制 `-p`

bash 复制代码
nmap -p 80 192.168.1.1          # 单个端口
nmap -p 80,443,22 192.168.1.1   # 多个端口(逗号分隔)
nmap -p 1-1000 192.168.1.1      # 端口范围
nmap -p- 192.168.1.1            # **所有端口**(1-65535)
nmap -p T:80,U:53 192.168.1.1   # 指定 TCP 80 和 UDP 53

🔍 服务版本探测 `-sV`

bash 复制代码
nmap -sV 192.168.1.1            # 识别服务版本(如 Apache 2.4.41)
nmap -sV --version-intensity 5  # 强度 0-9,越高越准确但越慢

🖥️ 操作系统检测 `-O`

bash 复制代码
sudo nmap -O 192.168.1.1        # 检测操作系统类型(Linux/Windows)
sudo nmap -O --osscan-guess 192.168.1.1  # 猜测最接近的系统

注意:需至少一个开放和一个关闭的端口,且需要 root 权限。

🚀 综合扫描 `-A`

bash 复制代码
sudo nmap -A 192.168.1.1        # 启用操作系统检测、版本检测、脚本扫描和 traceroute
# 等价于 -O -sV -sC --traceroute

📊 输出格式 `-o`

bash 复制代码
nmap -oN result.txt 192.168.1.1    # 普通文本(人类可读)
nmap -oX result.xml 192.168.1.1    # XML 格式(可导入工具分析)
nmap -oG result.grep 192.168.1.1   # Grep 友好格式(便于脚本处理)
nmap -oA result 192.168.1.1        # **同时输出三种格式**(result.nmap/.xml/.grep)

⚡ 扫描速度 `-T`

bash 复制代码
nmap -T0 192.168.1.1    # 偏执模式(间隔 5 分钟,极慢)
nmap -T1 192.168.1.1    # 鬼祟模式(间隔 15 秒)
nmap -T2 192.168.1.1    # 礼貌模式(间隔 0.4 秒)
nmap -T3 192.168.1.1    # 普通模式(默认)
nmap -T4 192.168.1.1    # 激进模式(较快,推荐)
nmap -T5 192.168.1.1    # 疯狂模式(极快,可能丢包)

🛡️ 防火墙规避

bash 复制代码
# 数据包分片(绕过包过滤防火墙)
sudo nmap -f 192.168.1.1              # 分成小 IP 包
sudo nmap -mtu 32 192.168.1.1         # 指定 MTU 大小(8 的倍数)

# 源端口欺骗
sudo nmap -g 53 192.168.1.1           # 使用知名端口 53(DNS)作为源端口

# 诱饵扫描(隐藏真实 IP)
sudo nmap -D RND:10 192.168.1.1       # 生成 10 个随机诱饵 IP
sudo nmap -D 192.168.1.5,192.168.1.6 192.168.1.1  # 指定诱饵 IP

🔧 脚本引擎 `--script` (NSE)

bash 复制代码
# 漏洞检测
nmap --script vuln 192.168.1.1        # 全面漏洞扫描

# 服务识别
nmap --script http-title 192.168.1.1  # 获取网站标题
nmap --script ssl-enum-ciphers 192.168.1.1  # 检测 SSL 加密套件

# 认证爆破
nmap --script=auth 192.168.1.1        # 弱口令检测
nmap --script=brute 192.168.1.1       # 暴力破解(谨慎使用)

# SQL 注入 / XSS 检测(只能检测极简单漏洞)
nmap -sV --script=http-sql-injection 192.168.1.1
nmap -sV --script=http-unsafe-output-escaping 192.168.1.1

# 查看所有可用脚本
ls /usr/share/nmap/scripts/
nmap --script-help=script-name        # 查看脚本说明

📢 详细程度控制

bash 复制代码
nmap -v 192.168.1.1         # 显示详细信息(推荐)
nmap -vv 192.168.1.1        # 更详细
nmap -d 192.168.1.1         # 调试信息(开发使用)
nmap --packet-trace 192.168.1.1  # 显示收发数据包统计

🌐 网络接口 `-e` (多网卡环境)

bash 复制代码
nmap -e eth1 192.168.1.1    # 指定使用 eth1 网卡扫描

⏸️ 恢复扫描 `-- resume`

bash 复制代码
nmap -oN scan.log 192.168.1.0/24        # 先输出到日志
nmap --resume scan.log                   # 中断后可恢复

五、实战组合命令

场景 1:快速发现内网存活主机

bash 复制代码
sudo nmap -sn 192.168.1.0/24 -oN live_hosts.txt

原理:仅 Ping 扫描,不探测端口,速度快。

场景 2:全面扫描单个目标*

bash 复制代码
sudo nmap -A -T4 -p- 192.168.1.1 -oN full_scan.txt

参数解析:综合扫描 + 激进速度 + 所有端口 + 文本输出。

场景 3:绕过防火墙的隐秘扫描

bash 复制代码
sudo nmap -sS -sV -T2 -f -g 53 -D RND:5 192.168.1.1

技巧:SYN 扫描 + 服务探测 + 低速 + 分片 + 源端口 53 + 5 个诱饵 IP。

场景 4:特定服务漏洞检测 *

bash 复制代码
sudo nmap -sV --script vuln -p 80,443,8080 192.168.1.1 -oX vuln_report.xml

输出 :XML 格式便于后续自动化分析。

六、结果解读

端口状态说明

open :端口开放,有服务监听

closed :端口关闭,无服务但可达

filtered:被防火墙过滤,无法确定状态

open|filtered:开放或被过滤(UDP 扫描常见)

closed|filtered :关闭或被过滤

典型输出示例

bash 复制代码
PORT     STATE SERVICE       VERSION
22/tcp   open  ssh           OpenSSH 7.6p1 Ubuntu 4ubuntu0.3
80/tcp   open  http          Apache httpd 2.4.29
443/tcp  open  ssl/http      Apache httpd 2.4.29
3306/tcp open  mysql         MySQL 5.7.29

OS: Linux 3.7 - 4.15

七、注意事项与最佳实践

✅合法合规

仅在授权网络中使用,未经授权扫描他人设备属于违法行为

  • 企业内部扫描需获得书面批准

  • 遵守《网络安全法》和当地法律法规

⚠️ 技术注意

1.权限 :SYN 扫描 (`-sS`)、OS 检测 (`-O`)、UDP 扫描 (`-sU`) 需要 root 权限

  1. 速度:避免在生产环境使用 `-T5`,可能导致网络设备过载

  2. 防火墙:现代 IDS/IPS 能检测 Nmap 扫描特征,需配合 `-T2`、`-f`、`-D` 等规避

  3. 准确性:OS 检测需至少一个开放端口和一个关闭端口,否则结果不可靠

💡 学习建议

初学者 :从 `-sT`、`-sV`、`-p` 开始,逐步学习高级选项

实验环境 :使用 Docker 搭建靶场(如 VulnHub、Metasploitable)练习

持续学习 :定期查看 `man nmap` 更新,关注 NSE 脚本库扩展

八、快速查阅手册

功能类别 核心命令 记忆要点
基础扫描 nmap 192.168.1.1 默认扫描前 1000 个 TCP 端口
** 存活探测 ** nmap -sn 192.168.1.0/24 sn = Scan No port
** 端口指定 ** nmap -p 1-65535 p = Port
** 服务版本 ** nmap -sV sV = Service Version
** 操作系统 ** sudo nmap -O O = OS
** 综合扫描 ** sudo nmap -A A = All(最强模式)
** SYN 扫描 ** sudo nmap -sS sS = SYN Scan
** 输出保存 ** nmap -oN result.txt oN = Output Normal
** 脚本扫描 ** nmap --script vuln 漏洞检测利器
** 速度控制 ** nmap -T4 T4 = 激进但稳定

总结:Nmap 是网络安全领域的"瑞士军刀",掌握 `-sS`、`-sV`、`-O`、`-A`、`-p`、`-T`、 `--script` 这 7 大核心参数,即可应对 90% 的扫描场景。建议结合具体环境灵活组合,并始终牢记合法边界。

相关推荐
礼拜天没时间.9 分钟前
【生产级实战】Linux 集群时间同步详解(NTP + Cron,超详细)
linux·运维·服务器·时间同步·cron·ntp
艾莉丝努力练剑9 分钟前
【Linux进程控制(一)】进程创建是呼吸,进程终止是死亡,进程等待是重生:进程控制三部曲
android·java·linux·运维·服务器·人工智能·安全
NEAI_N10 分钟前
嵌入式 Linux 中 system() 返回值的正确判定
linux·运维·服务器
Jason_zhao_MR13 分钟前
米尔T113核心板的农机中控屏显方案解析
linux·嵌入式硬件·嵌入式·交互
CodeAllen嵌入式22 分钟前
Rust 正式成为 Linux 永久核心语言
linux·开发语言·rust
水天需01034 分钟前
HISTCONTROL 介绍
linux
Full Stack Developme1 小时前
Spring Security 与 Apache Shiro 两大安全框架比较
spring boot·python·安全
小股虫1 小时前
缓存攻防战:在增长中台设计一套高效且安全的缓存体系
java·分布式·安全·缓存·微服务·架构
NewCarRen1 小时前
E-ACO架构驱动:云辅助车联网的全链路访问控制与安全防护
安全·架构
南工孙冬梅1 小时前
Linux中安装配置nfs
linux·运维·php