# Nmap Summary (ESP)

<details>

<summary><strong>从零开始学习 AWS 黑客技术，成为专家</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE（HackTricks AWS 红队专家）</strong></a><strong>！</strong></summary>

支持 HackTricks 的其他方式：

* 如果您想在 HackTricks 中看到您的 **公司广告** 或 **下载 PDF 版本的 HackTricks**，请查看 [**订阅计划**](https://github.com/sponsors/carlospolop)!
* 获取 [**官方 PEASS & HackTricks 商品**](https://peass.creator-spring.com)
* 探索 [**PEASS 家族**](https://opensea.io/collection/the-peass-family)，我们的独家 [**NFTs**](https://opensea.io/collection/the-peass-family)
* **加入** 💬 [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**电报群组**](https://t.me/peass) 或 **关注** 我们的 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks_live)**。**
* 通过向 [**HackTricks**](https://github.com/carlospolop/hacktricks) 和 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 仓库提交 PR 来分享您的黑客技巧。

</details>

<figure><img src="/files/YM7uBW8YtIhrJWT3a6lG" alt=""><figcaption></figcaption></figure>

{% embed url="<https://websec.nl/>" %}

```
nmap -sV -sC -O -n -oA nmapscan 192.168.0.1/24
```

## 参数

### 要扫描的IP

* **`<ip>,<net/mask>`:** 直接指定IP
* **`-iL <ips_file>`:** 列出IPs
* **`-iR <number>`**: 随机IP数量，可以使用 `--exclude <Ips>` 或 `--excludefile <file>` 排除可能的IP。

### 设备发现

默认情况下，Nmap启动一个发现阶段，包括：`-PA80 -PS443 -PE -PP`

* **`-sL`**: 非侵入式，列出目标，通过DNS请求解析名称。用于了解例如 [www.prueba.es/24](http://www.prueba.es/24) 所有IP是否为我们的目标。
* **`-Pn`**: 无ping。如果您知道它们都是活动的（否则，您可能会浪费很多时间，但此选项也会产生虚假负面结果，表示它们不活动），它可以防止发现阶段。
* **`-sn`** : 无端口扫描。完成侦察阶段后，不扫描端口。相对隐蔽，允许进行小范围网络扫描。具有特权时，发送一个ACK(-PA)到80，一个SYN(-PS)到443，以及一个回显请求和一个时间戳请求，没有特权时总是完成连接。如果目标是网络，则仅使用ARP(-PR)。如果与另一个选项一起使用，则仅丢弃另一个选项的数据包。
* **`-PR`**: ARP ping。在分析我们网络中的计算机时默认使用，比使用ping更快。如果不想使用ARP数据包，请使用 `--send-ip`。
* **`-PS <ports>`**: 发送SYN数据包，如果回答SYN/ACK则为开放（回答RST以避免结束连接），如果回答RST则为关闭，如果不回答则为不可达。如果没有特权，则自动使用完整连接。如果未指定端口，则默认为80。
* **`-PA <ports>`**: 与前一个类似，但使用ACK，结合两者可以获得更好的结果。
* **`-PU <ports>`**: 目标相反，发送到预期关闭的端口。某些防火墙仅检查TCP连接。如果关闭，则回答端口不可达，如果回答其他ICMP或不回答，则保持为目标不可达。
* **`-PE, -PP, -PM`** : ICMP PINGS: 回显回复，时间戳和地址掩码。用于确定目标是否活动。
* **`-PY<ports>`**: 默认发送SCTP INIT探测到80，INIT-ACK（开放）或ABORT（关闭）或无回应或ICMP不可达（不活动）可以回复。
* **`-PO <protocols>`**: 在标头中指定协议，默认为1（ICMP），2（IGMP）和4（Encap IP）。对于ICMP、IGMP、TCP（6）和UDP（17）协议，发送协议标头，对于其余协议仅发送IP标头。目的是由于标头的畸形，回答协议不可达或相同协议的响应，以了解其是否处于活动状态。
* **`-n`**: 无DNS
* **`-R`**: 始终DNS

### 端口扫描技术

* **`-sS`**: 不完成连接，因此不留下痕迹，如果可以使用非常好（特权）。默认使用此选项。
* **`-sT`**: 完成连接，因此会留下痕迹，但可以确保使用。默认情况下没有特权。
* **`-sU`**: 较慢，用于UDP。主要用于：DNS(53), SNMP(161,162), DHCP(67和68), (-sU53,161,162,67,68): 开放（回复），关闭（端口不可达），过滤（其他ICMP），开放/过滤（无回应）。对于开放/过滤，-sV发送大量请求以检测nmap支持的任何版本，并可以检测真实状态。这会大大增加时间。
* **`-sY`**: SCTP协议无法建立连接，因此没有日志，类似于-PY
* **`-sN,-sX,-sF`:** Null, Fin, Xmas，可以穿透一些防火墙并提取信息。它们基于符合标准的机器应该用RST回复所有没有SYN、RST或ACK标志的请求：开放/过滤（无回应），关闭（RST），过滤（ICMP不可达）。在Windows、CIsco、BSDI和OS/400上不可靠。在Unix上是可靠的。
* **`-sM`**: Maimon扫描：发送FIN和ACK标志，用于BSD，目前将所有返回为关闭。
* **`-sA, sW`**: ACK和Window，用于检测防火墙，了解端口是否被过滤。-sW可以区分开放/关闭，因为开放的端口会用不同的窗口值回复：开放（带有非0窗口的RST），关闭（RST窗口=0），过滤（ICMP不可达或无回应）。并非所有计算机都按此方式工作，因此如果全部关闭，则不起作用，如果有一些开放，则正常工作，如果有许多开放和少数关闭，则反向工作。
* **`-sI`:** 空闲扫描。对于存在主动防火墙但我们知道它不会过滤到某个IP的情况（或者当我们只是想要匿名时），我们可以使用僵尸扫描器（适用于所有端口），要查找可能的僵尸，我们可以使用脚本ipidseq或exploit auxiliary/scanner/ip/ipidseq。此扫描器基于IP数据包的IPID编号。
* **`--badsum`:** 发送错误的校验和，计算机将丢弃数据包，但防火墙可能会回复，用于检测防火墙。
* **`-sZ`:** “奇怪”的SCTP扫描器，当发送带有cookie回显片段的探测时，如果开放则应该被丢弃，如果关闭则应该回复ABORT。可以通过无法通过的防火墙，不好的是它不能区分过滤和开放。
* **`-sO`:** 协议IP扫描。发送错误和空标头，有时甚至无法区分协议。如果收到ICMP不可达协议，则为关闭，如果收到不可达端口，则为开放，如果收到其他错误，则为过滤，如果没有收到任何内容，则为开放|过滤。
* **`-b <server>`:** FTPhost--> 用于从另一台主机扫描主机，通过连接另一台机器的ftp，并要求其向您要扫描的端口发送文件，根据回复我们将知道它们是否开放。 \[\<user>:\<password>@]\<server>\[:\<port>] 几乎所有ftp服务器现在不允许您这样做，因此实用性很小。

### **集中分析**

**-p:** 用于指定要扫描的端口。要选择65335个端口：**-p-** 或 **-p all**。Nmap根据其流行度有内部分类。默认使用前1000个端口。使用 **-F**（快速扫描）分析前100个端口。使用 **--top-ports \<number>** 分析指定数量的主要端口（从1到65335）。按随机顺序检查端口，为了避免这种情况发生 **-r**。还可以选择端口：20-30,80,443,1024- 这最后意味着查看1024之后的端口。还可以按协议分组端口：U:53,T:21-25,80,139,S:9。还可以选择nmap中常用端口范围内的端口：-p \[-1024] 分析nmap-services中包含的端口直到1024。**--port-ratio \<ratio>** 分析常见端口，比率必须介于0和1之间。

**-sV** 版本扫描，可以调整强度从0到9，默认为7。

**--version-intensity \<numero>** 调整强度，较低的强度只会发送最可能的探测，而不是全部。这样可以大大缩短UDP扫描时间。

**-O** 操作系统检测

**--osscan-limit** 要正确扫描主机，至少需要一个端口开放和一个关闭，如果不满足此条件并且已设置此选项，则不会尝试进行操作系统预测（节省时间） **--osscan-guess** 当操作系统检测不完美时，会增加工作量

**脚本**

\--script *\<filename>*|*\<category>*|*\<directory>*|*\<expression>*\[,...]

默认情况下使用-sC或--script=default

可用的类型有: auth, broadcast, default, discovery, dos, exploit, external, fuzzer, intrusive, malware, safe, version, and vuln

* **Auth:** 运行所有可用于身份验证的脚本
* **Default:** 运行工具的默认基本脚本
* **Discovery:** 检索目标或受害者的信息
* **External:** 用于使用外部资源的脚本
* **Intrusive:** 使用被认为对受害者或目标具有侵入性的脚本
* **Malware:** 检查是否存在恶意代码或后门打开的连接
* **Safe:** 运行非侵入性脚本
* **Vuln:** 发现最常见的漏洞
* **All:** 运行所有可用的NSE扩展脚本

搜索脚本:

**nmap --script-help="http-\*" -> 以http-开头的脚本**

**nmap --script-help="not intrusive" -> 除了这些之外的所有脚本**

**nmap --script-help="default or safe" -> 在其中一个或两者中的脚本**

**nmap --script-help="default and safe" --> 同时存在的脚本**

**nmap --script-help="(default or safe or intrusive) and not http-\*"**

\--script-args *\<n1>*=*\<v1>*,*\<n2>*={*\<n3>*=*\<v3>*},*\<n4>*={*\<v4>*,*\<v5>*}

\--script-args-file *\<filename>*

\--script-help *\<filename>*|*\<category>*|*\<directory>*|*\<expression>*|all\[,...]

\--script-trace ---> 提供脚本运行信息

\--script-updatedb

**要运行单个脚本，只需输入: nmap --script Script\_Name target** --> 输入脚本将同时运行脚本和扫描器，因此也可以添加扫描器选项，可以添加 **“safe=1”** 以仅运行安全脚本。

**时间控制**

**Nmap可以调整时间单位为秒、分钟、毫秒:** --host-timeout 参数 900000ms, 900, 900s, and 15m 都是相同的。

Nmap将要扫描的主机总数分成组，并以块的形式分析这些组，直到所有组都被分析完毕，才会转移到下一个块（用户在块被分析之前也不会收到任何更新），这样，对于nmap来说使用大组更为高效。默认情况下，在C类中使用256。

可以使用\*\*--min-hostgroup\*\* ***\<numhosts>*****;** **--max-hostgroup** ***\<numhosts>***（调整并行扫描组大小）

可以控制并行扫描器的数量，但最好不要这样做（nmap已根据网络状态自动进行控制）: **--min-parallelism** ***\<numprobes>*****;** **--max-parallelism** ***\<numprobes>***

可以调整rtt超时时间，但通常不需要: **--min-rtt-timeout** ***\<time>*****,** **--max-rtt-timeout** ***\<time>*****,** **--initial-rtt-timeout** ***\<time>***

可以修改尝试次数:**--max-retries** ***\<numtries>***

可以修改主机扫描时间: **--host-timeout** ***\<time>***

可以调整每个测试之间的时间间隔以减慢速度: **--scan-delay** ***\<time>*****;** **--max-scan-delay** ***\<time>***

可以调整每秒发送的数据包数量: **--min-rate** ***\<number>*****;** **--max-rate** ***\<number>***

许多端口由于被过滤或关闭而响应时间较长，如果只关注打开的端口，可以使用以下选项加快速度: **--defeat-rst-ratelimit**

用于定义nmap攻击强度: -T paranoid|sneaky|polite|normal|aggressive|insane

-T (0-5)

-T0 --> 一次只扫描一个端口，等待5分钟后进行下一个

-T1 和 T2 --> 非常相似，但分别等待15秒和0.4秒进行下一个测试

-T3 --> 默认操作，包括并行操作

-T4 --> --max-rtt-timeout 1250ms --min-rtt-timeout 100ms --initial-rtt-timeout 500ms --max-retries 6 --max-scan-delay 10ms

-T5 --> --max-rtt-timeout 300ms --min-rtt-timeout 50ms --initial-rtt-timeout 250ms --max-retries 2 --host-timeout 15m --max-scan-delay 5ms

**防火墙/IDS**

阻止端口通信并分析数据包。

**-f** 用于分片数据包，默认在头部后分片为8字节，要指定大小使用 ..mtu（不要与-f一起使用），偏移必须是8的倍数。**版本扫描器和脚本不支持分片**

**-D decoy1,decoy2,ME** Nmap发送扫描器，但使用其他IP地址作为源，以隐藏您的真实IP地址。如果将ME放在列表中，Nmap会将您定位到那里，最好在您之前放置5或6个以完全掩盖您的身份。可以使用RND:\<number>生成随机IP。不适用于无TCP连接的版本检测。如果在网络内部，最好使用活动IP地址，否则很容易发现您是唯一活动的。

使用随机IP地址: nmap-D RND: 10 Ip\_target

**-S IP** 当Nmap无法获取您的IP地址时，您需要使用此选项提供IP地址。也可用于让目标认为有其他扫描目标。

**-e \<interface>** 选择接口

许多管理员会保持入站端口开放以确保一切正常运行，这样更容易而不是寻找其他解决方案。这些可能是DNS或FTP端口...为了查找此漏洞，nmap提供: **--source-port** ***\<portnumber>*****;-g** ***\<portnumber>*** *等效*

**--data** ***\<hex string>*** 用于发送十六进制文本: --data 0xdeadbeef and --data \xCA\xFE\x09

**--data-string** ***\<string>*** 用于发送普通文本: --data-string "Scan conducted by Security Ops, extension 7192"

**--data-length** ***\<number>*** Nmap仅发送头部，使用此选项可添加指定数量的字节（将随机生成）

要完全配置IP数据包，请使用\*\*--ip-options\*\*

如果要查看发送和接收的数据包选项，请指定--packet-trace。有关使用Nmap的IP选项的更多信息和示例，请参阅<http://seclists.org/nmap-dev/2006/q3/52>。

**--ttl** ***\<value>***

**--randomize-hosts** 使攻击不那么明显

**--spoof-mac** ***\<MAC address, prefix, or vendor name>*** 更改MAC地址示例: Apple, 0, 01:02:03:04:05:06, deadbeefcafe, 0020F2, and Cisco **--proxies** ***<逗号分隔的代理URL列表>*** 有时代理无法保持nmap所需的连接数，因此需要调整并行性: --max-parallelism

**-sP** 通过ARP在当前网络中发现主机

许多管理员在防火墙中创建规则，允许通过特定端口（如20、53和67）传递所有数据包，我们可以告诉nmap从这些端口发送数据包: **nmap --source-port 53 Ip**

**输出**

**-oN file** 普通输出

**-oX file** XML输出

**-oS file** Script kiddies输出

**-oG file** grepable输出

**-oA file** 除了-oS之外的所有输出

**-v level** 详细程度

**-d level** 调试

**--reason** 主机和状态的原因

**--stats-every time** 每隔一段时间显示运行状态

**--packet-trace** 查看发送的数据包，可以指定过滤器，如: --version-trace 或 --script-trace

**--open** 显示开放、开放|过滤和未过滤的端口

**--resume file** 生成摘要

**其他**

**-6** 允许ipv6

**-A** 等同于 -O -sV -sC --traceroute

**运行时**

在nmap运行时，可以更改选项:

v / V 增加/减少详细程度

d / D 增加/减少调试级别

p / P 打开/关闭数据包跟踪

? 打印运行时交互帮助屏幕

**Vulscan**

nmap的脚本，查看从离线数据库（从其他重要数据库下载）获取的服务版本，并返回可能的漏洞

使用的数据库包括:

1. Scipvuldb.csv | <http://www.scip.ch/en/?vuldb>
2. Cve.csv | [http://cve.mitre.org](http://cve.mitre.org/)
3. Osvdb.csv | [http://www.osvdb.org](http://www.osvdb.org/)
4. Securityfocus.csv | <http://www.securityfocus.com/bid/>
5. Securitytracker.csv | [http://www.securitytracker.com](http://www.securitytracker.com/)
6. Xforce.csv | [http://xforce.iss.net](http://xforce.iss.net/)
7. Exploitdb.csv | [http://www.exploit-db.com](http://www.exploit-db.com/)
8. Openvas.csv | [http://www.openvas.org](http://www.openvas.org/)

下载并安装到Nmap文件夹:

wget <http://www.computec.ch/projekte/vulscan/download/nmap\\_nse\\_vulscan-2.0.tar.gz> && tar -czvf nmap\_nse\_vulscan-2.0.tar.gz vulscan/ && sudo cp -r vulscan/ /usr/share/nmap/scripts/

还需下载数据库包并添加到 /usr/share/nmap/scripts/vulscan/

用法:

使用所有数据库: sudo nmap -sV --script=vulscan HOST\_TO\_SCAN

使用特定数据库: sudo nmap -sV --script=vulscan --script-args vulscandb=cve.csv HOST\_TO\_SCAN

## 加快Nmap服务扫描速度 x16

根据[**此帖子**](https://joshua.hu/nmap-speedup-service-scanning-16x)，您可以通过将 **`/usr/share/nmap/nmap-service-probes`** 中的所有 **`totalwaitms`** 值修改为 **300**，**`tcpwrappedms`** 修改为 **200** 来加快nmap服务分析速度。

此外，没有明确定义 **`servicewaitms`** 的探测使用默认值 **`5000`**。因此，我们可以为每个探测添加值，或者我们可以自己**编译nmap**并在[**service\_scan.h**](https://github.com/nmap/nmap/blob/master/service_scan.h#L79)中更改默认值。

如果您不想在 `/usr/share/nmap/nmap-service-probes` 文件中完全更改 **`totalwaitms`** 和 **`tcpwrappedms`** 的值，可以编辑[parsing code](https://github.com/nmap/nmap/blob/master/service_scan.cc#L1358)，使得`nmap-service-probes`文件中的这些值完全被忽略。

<figure><img src="/files/YM7uBW8YtIhrJWT3a6lG" alt=""><figcaption></figcaption></figure>

{% embed url="<https://websec.nl/>" %}

<details>

<summary><strong>从零开始学习AWS黑客技术，成为专家</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>

支持HackTricks的其他方式:

* 如果您想在HackTricks中看到您的**公司广告**或**下载PDF版本的HackTricks**，请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
* 获取[**官方PEASS & HackTricks周边产品**](https://peass.creator-spring.com)
* 探索[**PEASS家族**](https://opensea.io/collection/the-peass-family)，我们的独家[NFTs](https://opensea.io/collection/the-peass-family)系列
* **加入** 💬 [**Discord群**](https://discord.gg/hRep4RUj7f) 或 [**电报群**](https://t.me/peass) 或在**Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks_live)**上关注**我们。
* 通过向[**HackTricks**](https://github.com/carlospolop/hacktricks)和[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github仓库提交PR来分享您的黑客技巧。

</details>


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://hacktricks.xsx.tw/generic-methodologies-and-resources/pentesting-network/nmap-summary-esp.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
