当前位置: 首页 > news >正文

Nmap 工具的详细使用教程

Nmap(Network Mapper)是一款开源且功能强大的网络扫描和安全审计工具。它被广泛用于网络发现、端口扫描、操作系统检测、服务版本探测以及漏洞扫描等。

官方链接:

  • Nmap 官方网站: https://nmap.org/
  • Nmap 官方文档 (英文): https://nmap.org/book/man.html
  • Nmap 参考指南 (中文翻译可能存在,但官方以英文为主): 你可以在官方网站上寻找是否有社区翻译的中文文档,或者通过搜索引擎查找。

Nmap 核心功能:

  • 主机发现 (Host Discovery): 识别网络上存活的主机。
  • 端口扫描 (Port Scanning): 枚举目标主机上开放的 TCP 和 UDP 端口。
  • 服务版本探测 (Version Detection): 确定在开放端口上运行的应用程序的名称和版本号。
  • 操作系统检测 (OS Detection): 尝试确定目标主机的操作系统类型和版本。
  • 脚本扫描 (Scriptable Interaction): 使用 Nmap 脚本引擎 (NSE) 执行各种高级的检测和漏洞扫描任务。

安装 Nmap:

Nmap 支持多种操作系统,包括 Windows, Linux, 和 macOS。

  • Linux: 大多数 Linux 发行版的官方仓库都包含 Nmap。你可以使用包管理器进行安装,例如:
    • Debian/Ubuntu: sudo apt update && sudo apt install nmap
    • Fedora/RHEL/CentOS: sudo dnf install nmapsudo yum install nmap
  • Windows: 从 Nmap 官方网站下载可执行的安装程序 (.exe) 并按照提示进行安装。
  • macOS: 可以通过 Homebrew 安装: brew install nmap,或者从官网下载 .dmg 文件安装。

Nmap 基本语法:

Nmap 的基本命令行语法如下:

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

目标规范 (Target Specification):

你可以通过多种方式指定扫描目标:

  • IP 地址: nmap 192.168.1.1
  • 主机名: nmap scanme.nmap.org
  • IP 地址范围:
    • CIDR 表示法: nmap 192.168.1.0/24
    • 连字符表示法: nmap 192.168.1.1-100
  • 从文件读取目标列表: nmap -iL target_list.txt (每行一个目标)
  • 随机选择目标: nmap -iR <数量> (例如: nmap -iR 10 扫描10个随机主机)
  • 排除目标: --exclude <主机1[,主机2][,主机3],...>--excludefile <排除文件>

常用扫描类型 (Scan Types):

  • -sS (TCP SYN 扫描 / 半开放扫描): 这是最常用且默认的扫描类型(如果用户有足够权限)。它发送 SYN 包,如果收到 SYN/ACK 则表示端口开放,收到 RST 则表示端口关闭。因为它不完成 TCP 连接,所以通常比较隐蔽且快速。需要 root/管理员权限。
    sudo nmap -sS 192.168.1.1
    
  • -sT (TCP Connect() 扫描): 当 SYN 扫描不可用时(例如,用户没有原始套接字权限),Nmap 会默认使用此类型。它通过完成完整的 TCP 连接来判断端口是否开放。这种方式更容易被检测到。
    nmap -sT 192.168.1.1
    
  • -sU (UDP 扫描): 扫描 UDP 端口。UDP 扫描通常更慢且更困难,因为 UDP 是无连接协议,开放的端口可能不会响应,而关闭的端口通常会返回 ICMP “port unreachable” 消息。
    sudo nmap -sU 192.168.1.1
    
  • -sA (TCP ACK 扫描): 用于探测防火墙规则集,判断端口是否被防火墙过滤。它发送 ACK 包,如果收到 RST 则表示端口未被过滤(可能开放或关闭),如果没有收到响应或收到 ICMP 错误则表示端口被过滤。
    sudo nmap -sA 192.168.1.1
    
  • -sW (TCP Window 扫描): 与 ACK 扫描类似,但在某些系统上可以区分开放端口和关闭端口。
  • -sM (TCP Maimon 扫描): 一种非常隐蔽的扫描技术,以其发现者 Uriel Maimon 命名。
  • -sN, -sF, -sX (TCP Null, FIN, 和 Xmas 扫描): 这些是非常隐蔽的扫描技术,利用了 TCP RFC 中的一些细微差别。它们向目标端口发送特殊的 TCP 包(不设置 SYN, RST, 或 ACK 位)。如果端口关闭,目标主机会响应一个 RST 包;如果端口开放或被过滤,则不会有响应。这些扫描在非 Windows 系统上效果较好。
    sudo nmap -sN 192.168.1.1
    sudo nmap -sF 192.168.1.1
    sudo nmap -sX 192.168.1.1
    
  • --scanflags <flags> (自定义 TCP 扫描): 允许你指定自定义的 TCP 标志位 (URG, ACK, PSH, RST, SYN, FIN)。
  • -sI <僵尸主机[:探测端口]> (空闲扫描 / Idle Scan): 一种极其隐蔽的扫描技术,它利用一个空闲的“僵尸”主机来间接探测目标。设置起来比较复杂。
  • -b <FTP中继主机> (FTP bounce 扫描): 利用 FTP 服务器的代理特性进行扫描。现在很少有 FTP 服务器支持这种配置。

常用选项 (Options):

  • 端口规范 (Port Specification):
    • -p <端口范围>: 指定要扫描的端口。例如:
      • -p 22 (扫描端口 22)
      • -p 1-100 (扫描端口 1 到 100)
      • -p U:53,T:21-25,80 (扫描 UDP 端口 53,TCP 端口 21 到 25 和 80)
      • -p- (扫描所有 65535 个端口)
      • --top-ports <数量> (扫描最常见的 N 个端口)
    • -F (快速扫描模式): 仅扫描 Nmap 内置服务文件中列出的端口(比 --top-ports 100 更少)。
  • 服务和版本探测 (Service and Version Detection):
    • -sV (版本探测): 尝试确定在开放端口上运行的服务及其版本。
      nmap -sV 192.168.1.1
      
    • --version-intensity <级别>: 设置版本探测的强度 (0-9,默认为 7)。级别越高,探测越全面但也越慢。
    • --version-light: 等同于 --version-intensity 2
    • --version-all: 等同于 --version-intensity 9
  • 操作系统检测 (OS Detection):
    • -O (启用操作系统检测):
      sudo nmap -O 192.168.1.1
      
    • --osscan-limit: 仅对有希望的主机进行 OS 检测。
    • --osscan-guess--fuzzy: 推测操作系统,即使 Nmap 无法精确确定。
  • 时间和性能 (Timing and Performance):
    • -T<0-5> (设置时序模板):
      • T0 (paranoid): 非常慢,用于躲避 IDS。
      • T1 (sneaky): 比较慢,用于躲避 IDS。
      • T2 (polite): 降低扫描速度以减少带宽和目标主机资源的消耗。
      • T3 (normal): 默认速度。
      • T4 (aggressive): 假设网络状况良好,速度较快。
      • T5 (insane): 非常快,但可能导致结果不准确或淹没目标网络。
      nmap -T4 192.168.1.1
      
    • --min-hostgroup <数量>, --max-hostgroup <数量>: 并行扫描的主机组大小。
    • --min-parallelism <数量>, --max-parallelism <数量>: 并行探测的数量。
    • --min-rtt-timeout <时间>, --max-rtt-timeout <时间>, --initial-rtt-timeout <时间>: 控制探测超时。
    • --max-retries <次数>: 放弃前重试探测的次数。
    • --host-timeout <时间>: 扫描单个主机超时时间。
    • --scan-delay <时间>, --max-scan-delay <时间>: 控制探测之间的时间间隔。
  • 主机发现 (Host Discovery / Ping Sweeping):
    • -sn (Ping 扫描 / 禁止端口扫描): 只进行主机发现,不进行端口扫描。
      nmap -sn 192.168.1.0/24
      
    • -Pn (跳过主机发现 / 将所有主机视为在线): 不进行主机发现,直接对指定目标进行端口扫描。当你确定目标主机在线,但它可能屏蔽了 Ping 请求时很有用。
      nmap -Pn 192.168.1.1
      
    • -PS [端口列表] (TCP SYN Ping): 发送 SYN 包到指定端口进行主机发现。默认端口 80。
    • -PA [端口列表] (TCP ACK Ping): 发送 ACK 包到指定端口进行主机发现。默认端口 80。
    • -PU [端口列表] (UDP Ping): 发送 UDP 包到指定端口进行主机发现。默认端口 40125。
    • -PE, -PP, -PM (ICMP Ping 类型): 分别发送 ICMP Echo Request, Timestamp Request, Address Mask Request。
    • -PR (ARP Ping): 在本地网络上进行 ARP 扫描。通常比基于 IP 的 Ping 更快更可靠。
    • --dns-servers <服务器1[,服务器2],...>: 指定用于反向 DNS 解析的 DNS 服务器。
    • -n (不进行 DNS 解析)。
    • -R (总是进行 DNS 解析)。
  • 输出格式 (Output Formats):
    • -oN <文件名> (标准输出): 将结果保存为人类可读的文本文件。
    • -oX <文件名> (XML 输出): 将结果保存为 XML 格式,方便程序解析。
    • -oS <文件名> (ScRipTKIdd|3 oUTpuT): 脚本小子格式输出(不推荐)。
    • -oG <文件名> (Grepable 输出): 将结果保存为易于 grep 等工具处理的格式。
    • -oA <基本文件名> (输出所有格式): 同时生成标准、XML 和 Grepable 三种格式的输出文件,文件名为 <基本文件名>.nmap, <基本文件名>.xml, <基本文件名>.gnmap
      nmap -oA scan_results 192.168.1.1
      
    • -v (详细模式): 显示更详细的输出信息。可以使用 -vv 获得更详细的信息。
    • -d [级别] (调试模式): 显示调试信息。级别越高,信息越详细。
    • --reason: 显示端口处于特定状态的原因。
    • --open: 只显示开放的端口。
    • --packet-trace: 显示发送和接收的每个数据包。
    • --iflist: 显示主机接口和路由信息。
  • Nmap 脚本引擎 (NSE - Nmap Scripting Engine):
    • -sC--script=default: 执行默认类别的脚本。这些脚本通常被认为是安全且有用的。
      nmap -sC 192.168.1.1
      
    • --script <脚本名|类别|目录|表达式>: 执行指定的脚本、类别中的脚本、目录下的所有脚本或匹配表达式的脚本。
      • 按名称: --script=http-title
      • 按类别: --script=vuln (扫描漏洞)
      • 按目录: --script=./my-custom-scripts/
      • 使用通配符: --script "http-*"
    • --script-args <参数名1=值1,参数名2=值2,...>: 为 NSE 脚本提供参数。
    • --script-help <脚本名|类别|目录|表达式>: 显示脚本的帮助信息。
    • --script-updatedb: 更新 NSE 脚本数据库。
  • 防火墙/IDS 规避和欺骗 (Firewall/IDS Evasion and Spoofing):
    • -f (分片数据包): 将 TCP 头部拆分成更小的数据包,可能绕过一些简单的包过滤器。
    • --mtu <值>: 设置自定义的 MTU。
    • -D <诱饵1,诱饵2,ME,...> (使用诱饵进行扫描): 使扫描看起来像是从多个 IP 地址发起的,其中 ME 代表你自己的真实 IP 地址。
      sudo nmap -D RND:10,192.168.1.101,ME 192.168.1.1
      
      (RND:10 表示随机生成10个诱饵IP)
    • -S <源IP地址> (源地址欺骗): 欺骗源 IP 地址。通常只有在你能看到响应的情况下才有用。
    • -e <接口> (指定网络接口)。
    • --source-port <端口号>-g <端口号> (源端口欺骗)。
    • --data-length <数值> (在发送的包中附加随机数据)。
    • --proxies <代理URL列表>: 通过 HTTP/SOCKS4 代理进行扫描。
  • 其他选项:
    • -6 (启用 IPv6 扫描)。
    • -A (启用 OS 检测、版本探测、脚本扫描和 Traceroute): 这是一个方便的聚合选项,等同于 -O -sV -sC --traceroute
      sudo nmap -A 192.168.1.1
      
    • --traceroute: 跟踪到目标主机的路径。

Nmap 扫描示例:

  1. 快速扫描单个主机,识别最常见的开放端口:

    nmap -F 192.168.1.1
    
  2. 对整个子网进行 Ping 扫描,找出存活主机:

    nmap -sn 192.168.1.0/24
    
  3. 对目标主机进行详细扫描,包括 TCP SYN 扫描所有端口、操作系统检测、服务版本探测,并执行默认脚本,将结果保存到所有格式:

    sudo nmap -sS -p- -O -sV -sC -oA detailed_scan_results 192.168.1.1
    

    (注意: -p- 扫描所有端口会非常耗时)

  4. 扫描特定 TCP 端口 (例如 80, 443) 和 UDP 端口 (例如 53),并进行版本探测:

    sudo nmap -sS -sU -p T:80,443,U:53 -sV 192.168.1.1
    
  5. 使用 vuln 类别的 NSE 脚本扫描目标主机上的已知漏洞:

    sudo nmap --script vuln 192.168.1.1
    
  6. 扫描一个网站,尝试获取 HTTP 头部信息和网站标题:

    nmap -sV --script=http-headers,http-title scanme.nmap.org
    
  7. 在本地网络中进行 ARP 扫描以快速发现主机:

    sudo nmap -PR 192.168.1.0/24
    
  8. 隐蔽扫描,使用 TCP Null 扫描,设置较慢的时序模板,并使用诱饵:

    sudo nmap -sN -T1 -D RND:5,ME 192.168.1.1
    

理解 Nmap 输出:

Nmap 的输出通常包含以下信息:

  • Starting Nmap …: Nmap 开始扫描的时间和版本信息。
  • Nmap scan report for <目标IP/主机名>: 目标的信息。
  • Host is up (<延迟>s latency). (如果进行了主机发现且主机在线)
  • Not shown: XXX closed ports / XXX filtered ports: 未显示的关闭或被过滤的端口数量。
  • PORT STATE SERVICE VERSION:
    • PORT: 端口号和协议 (例如 22/tcp)。
    • STATE: 端口的状态:
      • open: 端口开放,应用程序正在监听连接。
      • closed: 端口关闭,没有应用程序在监听。但主机可达。
      • filtered: Nmap 无法确定端口是开放还是关闭,因为防火墙或其他网络设备阻止了探测。
      • unfiltered: 端口可访问,但 Nmap 无法确定其是开放还是关闭 (通常见于 ACK 扫描)。
      • open|filtered: Nmap 无法区分端口是开放还是被过滤 (例如,某些 UDP 扫描的结果)。
      • closed|filtered: Nmap 无法区分端口是关闭还是被过滤。
    • SERVICE: Nmap 根据端口号猜测的服务名称 (例如 ssh)。
    • VERSION: (如果使用了 -sV) 在该端口上运行的服务的详细版本信息。
  • OS CPE: (如果使用了 -O) 操作系统的通用平台枚举 (CPE) 标识符。
  • OS details: (如果使用了 -O) Nmap 对操作系统的猜测。
  • TRACEROUTE (using <协议> to port <端口>): (如果使用了 --traceroute) 到目标的路由跳数。
  • NSE Script Results: (如果使用了脚本扫描) NSE 脚本的输出。
  • Nmap done: 扫描完成的信息,包括扫描的主机数量、耗时等。

相关文章:

  • 《Python星球日记》第34天:Web 安全基础
  • 前端流行框架Vue3教程:13. 组件传递数据_Props
  • 今年我国已发生三级以上地震318次
  • 在 Win11 下安装 Wireshark 的详细步骤
  • 深入浅出iOS性能优化:打造极致用户体验的实战指南
  • 餐饮加盟店如何通过日事清全流程闭环管理实现进度同步与效率升级?
  • Java学习手册:Base64 编码概念和应用场景
  • python校园二手交易管理系统-闲置物品交易系统
  • python setup.py install --user和pip install -e .的区别
  • C++ - 仿 RabbitMQ 实现消息队列(1)(环境搭建)
  • 高等数学第四章---不定积分(4.4有理函数的不定积分2)
  • springBoot中自定义一个validation注解,实现指定枚举值校验
  • 【JEECG】BasicTable单元格编辑,插槽添加下拉组件样式错位
  • 【Trea】Trea国际版|海外版下载
  • Suno v4.5:AI 音乐创作的新突破
  • SLAM:正定矩阵二次型的定义和性质
  • GD32/STM32 ADC/DMA使用指南
  • 人工智能端侧热度再起
  • hybird接口配置
  • FTPS和SFTP(文件传输安全协议)
  • 诺和诺德一季度减重版司美格鲁肽收入增83%,美国市场竞争激烈下调全年业绩预期
  • 苹果用户,安卓来“偷心”
  • 韩正出席庆祝中国欧盟建交50周年招待会并致辞
  • 上海虹桥高铁站拦门事件反转,谁在带偏网友?
  • 长和获准出售巴拿马运河港口以外的港口?外交部:该报道没有依据
  • 晒被子最大的好处,其实不是杀螨虫,而是……