Kali Linux 教程:端口扫描工具-Nmap 作者:马育民 • 2026-09-29 07:59 • 阅读:10000 # 介绍 Nmap(Network Mapper)是Kali内置最经典端口扫描器,底层基于TCP/IP栈,可做端口探测、服务识别、操作系统指纹识别、脚本检测。 # Nmap 常用参数 ```bash nmap [扫描类型] [参数] <目标IP/网段> ``` | 参数 | 作用说明 | | ---- | ---- | | `-sS` | SYN半开扫描(默认root权限下,最常用,不完成TCP三次握手) | | `-sT` | TCP全连接扫描,普通用户权限可用,容易被日志记录 | | `-sU` | UDP端口扫描,速度慢,用于DNS、SNMP等UDP服务 | | `-sF` | FIN隐秘扫描,针对部分无状态防火墙 | | `-Pn` | **不进行主机存活探测**,直接扫描端口;目标禁ping时必用 | | `-sn` | 仅主机存活扫描,**不扫端口**(ping扫描) | | `-p 端口` | 指定端口:`-p 80`;多端口`-p 22,80,443`;范围`-p 1-1000`;全部端口`-p-` | | `-F` | 快速扫描,只扫描常用100个端口 | | `-T0 ~ T5` | 扫描时序模板:T0最慢(极隐秘),T5最快(暴力,极易触发WAF);常用`-T4` | | `-oN` | 输出普通文本报告 | | `-oX` | 输出XML报告,可导入Metasploit、Nessus | | `-oG` | grep格式报告,方便shell处理 | | `-A` | 全能扫描:同时开启**服务版本探测+操作系统识别+脚本扫描+路由追踪** | | `-sV` | 服务版本探测,识别端口上运行程序与版本号 | | `-O` | 操作系统指纹识别(OS识别) | | `--script` | 调用NSE脚本引擎 | | `-iL` | 从文件读取目标列表,批量扫描 | # 端口扫描基础用法 1. 简单SYN扫描(root) ```bash nmap -sS 192.168.1.100 ``` 2. 指定端口范围扫描 ```bash nmap -sS -p 1-1000 192.168.1.100 ``` 3. 扫描全部65535端口 ```bash nmap -sS -p- 192.168.1.100 ``` 4. 目标禁止ping,跳过主机探测 ```bash nmap -sS -Pn 192.168.1.100 ``` # 服务探测 探测端口对应的应用程序、版本信息,用于后续漏洞查找。 ```bash nmap -sS -sV -p 22,80,443 192.168.1.100 ``` 输出示例: ``` PORT STATE SERVICE VERSION 80/tcp open http Apache httpd 2.4.49 ``` ### 4. 操作系统版本识别 `-O` 依靠TCP/IP协议栈指纹比对识别目标操作系统。 > 限制:需要root权限;目标防火墙可能伪造指纹,结果为推测,不是100%准确。 ```bash nmap -sS -O 192.168.1.100 ``` `-A` 等价于 `-sV -O --script default -traceroute`,一键全能扫描: ```bash nmap -sS -A 192.168.1.100 ``` # Nmap 高级用法 ### 1. 隐秘扫描(规避检测) 1. SYN半开扫描 `-sS` 不完成三次握手,目标系统日志一般不会记录完整连接,是最常用低噪音扫描。 > 必须root权限。 2. FIN扫描 `-sF` 发送FIN包;关闭端口会返回RST,开放端口忽略。 局限性:Windows系统会对FIN包统一返回RST,**对Windows无效**。 ```bash nmap -sF -p1-100 192.168.1.100 ``` 3. 空闲扫描 `-sI`(僵尸扫描) 借助一台“僵尸主机”做中间人,扫描源IP显示为僵尸主机,隐藏自身IP。条件苛刻,现代环境很难成功。 ```bash nmap -sI 僵尸主机IP 目标IP ``` 4. 减速扫描降低告警:`-T0` ```bash nmap -sS -T0 -Pn 192.168.1.100 ``` ### 2. 批量扫描网段/目标文件 1. CIDR网段扫描(192.168.1.0/24整个C段) ```bash nmap -sS -sn 192.168.1.0/24 ``` 2. 读取txt文件内多个目标批量扫描 新建`targets.txt`每行一个IP: ``` 192.168.1.100 192.168.1.101 ``` ```bash nmap -sS -iL targets.txt ``` ### 3. Nmap漏洞扫描(NSE脚本引擎) NSE(Nmap Scripting Engine)内置大量脚本,可做弱口令、漏洞检测、目录探测。 脚本目录:`/usr/share/nmap/scripts/` - 使用漏洞分类脚本 `vuln` ```bash nmap -sS --script vuln 192.168.1.100 ``` > vuln脚本只做简单漏洞探测,不等于专业漏扫工具(OpenVAS/Nessus),误报较多。 - 指定单个脚本(例如检测http弱口令) ```bash nmap -sS --script http-default-accounts 192.168.1.100 ``` ### 4. 输出报告 ```bash # 文本报告 nmap -sS -oN scan.txt 192.168.1.100 # XML报告(导入Metasploit) nmap -sS -oX scan.xml 192.168.1.100 # grep格式方便筛选 nmap -sS -oG scan.gnmap 192.168.1.100 ``` # Nmap 端口4种核心状态 Nmap扫描输出中最关键4个状态:**open / closed / filtered / unfiltered** ### 1. open(开放) 目标端口正在监听应用程序,收到探测包并正常响应。 > 含义:该端口对外提供服务,可以建立连接。 示例:`80/tcp open http` ### 2. closed(关闭) 端口是开启的,但**没有程序监听该端口**;目标主机收到探测包后回复RST重置包。 > 主机存活,但是端口没有服务。 内网环境下常见。 ### 3. filtered(被过滤) Nmap收不到目标的任何响应包。 原因:防火墙、ACL策略、WAF拦截探测包,丢弃数据包,不返回任何应答。 > Nmap无法判断端口是开还是关。 ### 4. unfiltered(未过滤) 仅在TCP ACK扫描 `-sA` 才会出现。 ACK包发出去收到RST应答,说明**数据包可以到达目标,没有防火墙拦截**,但无法确定端口本身是open还是closed。 #### 补充两种较少见状态 - open|filtered:Nmap无法区分开放/过滤,UDP扫描、隐秘扫描经常出现; - closed|filtered:无法区分关闭还是被过滤。 ### 快速区分记忆 1. open:端口有服务,能连通 2. closed:主机在线,端口没开服务 3. filtered:包被防火墙丢了,无应答 4. unfiltered:包可达防火墙,但是不知道端口是否开放(ACK扫描特有) 原文出处:/show_1GW48Ovu1TLb.html