Nmap 摘要 (ESP)
Tip
学习并实践 AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
学习并实践 GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
学习并实践 Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
浏览用于评估路线的 完整 HackTricks Training 目录(ARTA/GRTA/AzRTA)以及 Linux Hacking Expert (LHE)。
支持 HackTricks
- 查看 订阅方案!
- 加入 💬 Discord 群组、telegram 群组,关注 X/Twitter 上的 @hacktricks_live,或查看 LinkedIn 页面 和 YouTube 频道。
- 通过向 HackTricks 和 HackTricks Cloud github 仓库提交 PR,分享 hacking 技巧。
nmap -sV -sC -O -n -oA nmapscan 192.168.0.1/24
参数
要扫描的 IPs
<ip>,<net/mask>: 直接指明 IPs-iL <ips_file>: IPs 列表-iR <number>: 随机 IP 数量,可以用--exclude <Ips>或--excludefile <file>排除某些 IP。
设备发现
默认情况下 Nmap 会启动一个发现阶段,包括: -PA80 -PS443 -PE -PP
-sL:非侵入性,列出目标,会发起 DNS 请求以解析名称。用于判断例如 www.prueba.es/24 下的所有 IPs 是否为我们的目标。-Pn:不 ping。若你已确认所有主机都在线,此选项很有用(否则可能浪费大量时间,但此选项亦可能产生假阴性,显示它们不活动),它会跳过发现阶段。-sn:不做端口扫描。完成侦察阶段后不扫描端口。相对隐蔽,可用于小范围网络扫描。有特权时会向 80 发送 ACK(-PA)、向 443 发送 SYN(-PS)以及发送 echo 请求和 Timestamp 请求;无特权时则总是完成连接。如果目标是网络,则仅使用 ARP(-PR)。若与其他选项一起使用,则只发送其他选项的探测数据包。-PR:Ping ARP。分析我们网络内主机时默认使用,比使用 ICMP ping 更快。如果不想使用 ARP 包,使用--send-ip。-PS <ports>:发送 SYN 包;若回应 SYN/ACK 则为 open(随后发送 RST 以避免完成连接),若回应 RST 则为 closed,若无响应则为 unreachable。无特权时会自动使用完整连接。如果未指定端口,默认发送到 80。-PA <ports>:与上类似但发送 ACK,二者结合可获得更好结果。-PU <ports>:目标相反,发送到预期为 closed 的端口。有些防火墙只检查 TCP 连接。若端口 closed,会回复 port unreachable;若回复其他 ICMP 或无回复,则记为 destination unreachable。-PE, -PP, -PM:ICMP PINGS:回显应答(echo reply)、时间戳(timestamp)和地址掩码(address mask)请求。用于判断目标是否在线。-PY<ports>:发送 SCTP INIT 探针,默认到 80;可能回应 INIT-ACK(open)、ABORT(closed)、无响应,或 ICMP unreachable(inactive)。-PO <protocols>:在头部指定协议,默认 1(ICMP)、2(IGMP) 和 4(Encap IP)。对于 ICMP、IGMP、TCP (6) 和 UDP (17) 会发送相应协议头,其他协议只发送 IP 头。这样通过头部的畸形可收到 Protocol unreachable 或同协议的响应,从而判断是否在线。-n:不进行 DNS 解析-R:始终进行 DNS 解析--system-dns:强制使用操作系统解析器而非 Nmap 的并行 stub resolver。当/etc/hosts、split-DNS 或解析器插件返回的数据与 Nmap 的直接查询不同时很有用。它较慢;自 Nmap 7.96 起正向查找已并行化,通常仅为了解析器兼容性才需要使用。--dns-servers <server[,server],...>:为反向查找指定 DNS 服务器。在内部评估时可直接查询权威或内部解析器,或将-sL/反向 DNS 流量从测试者的默认解析器导走。
端口扫描技术
-sS:不完成三次握手,因此通常不留痕迹(需特权)。这是默认使用的扫描方法。-sT:完成连接,因此会留下痕迹,但无需特权可用。-sU:针对 UDP,速度较慢。常见服务:DNS(53)、SNMP(161,162)、DHCP(67,68)。例如-sU 53,161,162,67,68:open(有回复)、closed(port unreachable)、filtered(其他 ICMP)、open/filtered(无响应)。对于 open/filtered,-sV会发送大量探针以识别版本并确定真实状态,但会大幅增加耗时。-sY:SCTP 扫描,因握手不完全可能不留下日志,作用类似-PY。-sN,-sX,-sF: Null、Fin、Xmas 扫描,可穿透某些防火墙并提取信息。基于标准实现主机会对不含 SYN 的请求以 RST 响应:open/filtered(无响应)、closed(RST)、filtered(ICMP unreachable)。在 Windows、Cisco、BSDI 和 OS/400 上不可靠,在 Unix 上可用。-sM:Maimon 扫描:发送 FIN 和 ACK 标志,曾用于 BSD,但当前通常会将所有端口判定为 closed。-sA, sW:ACK 和 Window 扫描,用于检测防火墙,判断端口是否被过滤。-sW可区分 open/closed,因为 open 的 RST 返回的 window 值与 closed 不同:open(RST 且 window ≠ 0)、closed(RST 且 window = 0)、filtered(ICMP unreachable 或无响应)。并非所有主机都遵循此行为:若都被判为 closed,则说明方法不适用;若少数为 open,则适用;若多数为 open、少数 closed,则行为相反。-sI: Idle scan(空闲扫描)。当存在活跃防火墙但我们知道某个 IP 不被过滤(或需要匿名性)时可使用 zombie 扫描(适用于所有端口)。查找潜在 zombie 可用脚本 ipidseq 或 exploit auxiliary/scanner/ip/ipidseq。此扫描基于 IP 包的 IPID 值工作。--badsum: 发送错误校验和,目标主机通常会丢弃这些包,但防火墙可能会回应,用于检测防火墙。-sZ: “Weird” SCTP 扫描,发送包含 cookie echo 片段的探针:若端口 open 应丢弃,若 closed 则以 ABORT 响应。能通过 init 无法穿透的防火墙,但无法区分 filtered 与 open。-sO: IP 协议扫描。发送畸形或空的协议头,有时甚至无法识别协议。若收到 ICMP protocol unreachable 则为 closed,若收到 port unreachable 则为 open,若收到其它错误则为 filtered,若无响应则为 open|filtered。-b <server>: FTP bounce。用于通过另一台主机扫描目标:连接到另一台机器的 FTP 并要求其向你想扫描的端口发送文件,根据回应判断端口是否开放。格式[<user>:<password>@]<server>[:<port>]。几乎所有现代 FTP 服务器都不再允许此操作,因此实用性已很低。
重点分析
-p: 用于指定要扫描的端口。扫描全部 65,535 个端口可用:-p- 或 -p all。Nmap 根据端口流行度有内部分类。默认扫描前 1000 个端口。使用 -F(快速扫描)时分析前 100 个。使用 –top-ports -p [-1024] 会分析 nmap-services 中包含到端口 1024 为止的端口。–port-ratio
-sV 版本扫描,强度可从 0 到 9 调节,默认 7。
–version-intensity
–version-light 等同于 --version-intensity 2。对大范围或慢速 UDP 服务的第一次扫描非常有用。
–version-all 等同于 --version-intensity 9。强制发送所有探针,对于只有罕见探针能触发响应的服务很有用。
–allports 强制对 nmap-service-probes 排除的端口进行版本检测(例如 TCP/9100)。注意:对某些打印机或原始 socket 监听器,这会导致它们打印探针数据。
-O OS 识别
–osscan-limit 要正确进行主机扫描,通常需要至少一个 open 端口和一个 closed 端口。如果不满足且启用了此选项,则不会尝试 OS 预测(节省时间)。
–osscan-guess 当 OS 识别不精确时,启用此项会让它更努力地尝试猜测。
脚本
–script
要使用默认脚本,使用 -sC 或 –script=default
可用类型:auth、broadcast、default、discovery、dos、exploit、external、fuzzer、intrusive、malware、safe、version 和 vuln
- Auth: 执行所有可用的认证脚本
- Default: 执行基本的默认工具脚本
- Discovery: 从目标检索信息
- External: 使用外部资源的脚本
- Intrusive: 使用被认为对目标具有侵入性的脚本
- Malware: 检查恶意代码或后门打开的连接
- Safe: 执行非侵入性脚本
- Vuln: 发现已知的常见漏洞
- All: 执行所有可用的 NSE 扩展脚本
要查找脚本:
nmap –script-help=“http-*” -> 以 http- 开头的那些
nmap –script-help=“not intrusive” -> 排除 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
–script-args-file
–script-help
–script-trace —> 提供脚本执行进度信息
–script-updatedb
要使用某脚本,只需输入:nmap –script Script_Name target –> 当使用脚本时,脚本和扫描器都会执行,因此也可以添加扫描器选项。可以添加 “safe=1” 以仅执行安全脚本。
时间控制
Nmap 可以接受以 秒、分钟、毫秒 表示的时间参数:–host-timeout 参数 900000ms、900、900s 或 15m 都表示相同的值。
Nmap 将要扫描的主机数分成若干组并分块处理,因此不会进入下一块直到当前块所有主机都完成(用户在当前块完成之前不会收到更新)。因此 Nmap 在使用大组时更为高效。默认在 C 类网络中使用 256。
可以用 –min-hostgroup
你可以控制并行扫描器的数量,但通常不必(Nmap 已基于网络状态自动控制):–min-parallelism
可以修改 RTT 超时,但通常不需要:–min-rtt-timeout 、–max-rtt-timeout 、–initial-rtt-timeout
可以修改尝试次数:–max-retries
可以修改对单个主机的扫描时间:–host-timeout
可以修改每次测试之间的间隔以减慢速度:–scan-delay ;–max-scan-delay
可以修改每秒数据包数量:–min-rate
当端口被过滤或关闭时,许多端口响应很慢。如果只关心开放端口,可用:–defeat-rst-ratelimit 提升速度。
定义 Nmap 攻击侵略性的方式:-T paranoid|sneaky|polite|normal|aggressive|insane
-T(0-5)
-T0 –> 每次只扫描 1 个端口,并在下一个端口前等待 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 的倍数。Version scanners 和 scripts 不支持分片
-D decoy1,decoy2,ME Nmap 发送扫描,但伪造其它 IP 为来源,从而隐藏真实来源。如果在列表中写入 ME,Nmap 会将你置于该位置,最好在你之前放置 5 或 6 个 decoy 以彻底掩盖。随机 IP 可用 RND:
使用随机 IP 示例:nmap -D RND:10 Target_IP
-S IP 当 Nmap 无法自动识别你的 IP 时可手动指定。也可用于让对方以为另一目标在扫描它们。
-e
许多管理员为方便而开放某些源端口以保证服务可用(比如 20、53、67),Nmap 提供:–source-port
–data
–data-string
–data-length
要完整配置 IP 包,请使用 –ip-options
若想查看发送/接收包的选项,指定 –packet-trace。关于用 Nmap 使用 IP options 的更多信息与示例,请参见 http://seclists.org/nmap-dev/2006/q3/52。
–ttl
–randomize-hosts 使攻击顺序随机以降低可发现性
–spoof-mac <MAC address, prefix, or vendor name> 更改 MAC,示例:Apple、0、01:02:03:04:05:06、deadbeefcafe、0020F2、Cisco
–proxies
-sP 通过 ARP 发现我们网络内的主机
许多管理员创建允许来自某个源端口的所有数据包放行的防火墙规则(如 20、53、67),我们可以让 Nmap 从这些端口发送数据:nmap –source-port 53 IP
输出
-oN file 普通文本输出
-oX file XML 输出
-oS file Script kiddies 输出
-oG file Greppable 输出(仍可用,但已弃用;XML 更适合自动化,因为新功能首先加入 XML)。若想使用 --resume 保持使用 -oN,解析时优先 -oX/-oA。
-oA file 除 -oS 外的所有格式
–webxml 将 XML 的 stylesheet 引用更改为 https://nmap.org/svn/docs/nmap.xsl,便于在另一台机器上以 HTML 打开 XML。
–stylesheet <path|url> 使用自定义 XSL 样式表。--webxml 只是指向官方托管样式表的快捷方式。
-v level 冗长级别(verbosity)
-d level 调试级别
–reason 显示主机状态的原因
–stats-every time 每隔该时间输出进度统计
–packet-trace 查看发出的数据包,可指定过滤如:–version-trace 或 –script-trace
–open 仅显示 open、open|filtered 和 unfiltered
–resume file 从普通(-oN)或 grepable(-oG)输出文件恢复中断的扫描。在当前工作流程中,常保留 -oN 以便可恢复,同时使用 -oX 供解析。
用于解析/HTML 转换工作流的示例:
# Send only XML to stdout for tooling
nmap -sV -oX - 10.10.10.0/24
# Portable HTML-friendly XML
nmap -sV --webxml -oX scan.xml 10.10.10.10
杂项
-6 允许 IPv6
-A 等同于 -O -sV -sC –traceroute
运行时
当 Nmap 正在运行时,我们可以更改选项:
v / V 增加 / 减少详细级别
d / D 增加 / 减少调试级别
p / P 开启 / 关闭数据包跟踪
? 打印运行时交互帮助界面
Vulscan
Nmap 脚本,查看离线数据库中获取的服务版本(从其他重要来源下载)并返回可能的漏洞
它使用的 DB 有:
- Scipvuldb.csv | http://www.scip.ch/en/?vuldb
- Cve.csv | http://cve.mitre.org
- Osvdb.csv | http://www.osvdb.org
- Securityfocus.csv | http://www.securityfocus.com/bid/
- Securitytracker.csv | http://www.securitytracker.com
- Xforce.csv | http://xforce.iss.net
- Exploitdb.csv | http://www.exploit-db.com
- Openvas.csv | 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/
你还需要下载这些 DB 包并将它们添加到 /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
如果你有 Internet 访问,Nmap 的官方 vulners NSE 脚本通常是基于版本补充信息的最快捷且维护良好的替代方案:
nmap -sV --script vulners --script-args mincvss=7.0 <IP>
This script belongs to the safe, external, and vuln categories. Because it depends on how accurate -sV was, validate hits manually when the service banner is generic or proxied.
最近实用说明 (7.94+)
- 自 Nmap 7.94 起,UDP 端口扫描(
-sU)和版本检测(-sV)使用相同的nmap-service-probes有效载荷来源。来自扫描阶段的 UDP 响应可以立即用于版本匹配,因此-sU -sV --version-light现在是对大范围或丢包严重范围的良好第一步。 - 自 Nmap 7.94 起,
-sV还可以探测隐藏在 DTLS 后面的 UDP 服务,这对将 UDP 协议封装在 DTLS 中的现代管理/ICS 设备很有用。 - Nmap 7.95 添加了大量新的服务指纹,包括
grpc、mysqlx、remotemouse和tuya,以及新的面向 ICS 的 NSE 覆盖,例如hartip-info和iec61850-mms。如果你在扫描 OT 或嵌入式设备群,更新 Nmap 比过早添加自定义探针更为重要。 - 自 Nmap 7.96 起,正向 DNS 查找也实现了并行化。大型主机名列表现在快得多,因此
--system-dns通常应该为兼容性问题保留,而不是用于性能。
Speed Up Nmap Service scan x16
According to this post you can speed up the nmap service analysis by modifying all the totalwaitms values in /usr/share/nmap/nmap-service-probes to 300 and tcpwrappedms to 200.
Moreover, probes which do not have a specifically defined servicewaitms use a default value of 5000. Therefore, we can either add values to each of the probes, or we can compile nmap ourselves and change the default value in service_scan.h.
If you don’t want to change the values of totalwaitms and tcpwrappedms at all in the /usr/share/nmap/nmap-service-probes file, you can edit the parsing code such that these values in the nmap-service-probes file are completely ignored.
为受限环境构建静态 Nmap
在加固或精简的 Linux 环境(容器、appliances)中,动态链接的 Nmap 二进制通常会因为缺少运行时加载器或共享库(例如 /lib64/ld-linux-x86-64.so.2、libc.so)而失败。构建自己的静态链接 Nmap 并将 NSE 数据捆绑在一起,可以在不安装系统包的情况下运行。
High-level approach
- 使用通过 Docker 提供的干净 amd64 Ubuntu 构建环境。
- 将 OpenSSL 和 PCRE2 构建为静态库。
- 构建静态链接的 Nmap,并使用随附的 libpcap/libdnet 以避免动态依赖。
- 将 NSE 脚本和数据目录与二进制一起打包。
发现目标架构(示例)
uname -a
# If building from macOS/ARM/etc., pin the builder arch:
docker run --rm --platform=linux/amd64 -v "$(pwd)":/out -w /tmp ubuntu:22.04 bash -lc 'echo ok'
步骤 1 — 准备工具链
set -euo pipefail
export DEBIAN_FRONTEND=noninteractive
apt-get update && apt-get install -y --no-install-recommends \
build-essential ca-certificates curl bzip2 xz-utils pkg-config perl python3 file git \
automake autoconf libtool m4 zlib1g-dev
步骤 2 — 构建静态 OpenSSL (1.1.1w)
OSSL="1.1.1w"
curl -fsSLO "https://www.openssl.org/source/openssl-$OSSL.tar.gz"
tar xzf "openssl-$OSSL.tar.gz" && cd "openssl-$OSSL"
./Configure no-shared no-zlib linux-x86_64 -static --prefix=/opt/ossl
make -j"$(nproc)" && make install_sw
cd /tmp
步骤 3 — 构建静态 PCRE2 (10.43)
PCRE2=10.43
curl -fsSLO "https://github.com/PCRE2Project/pcre2/releases/download/pcre2-$PCRE2/pcre2-$PCRE2.tar.bz2"
tar xjf "pcre2-$PCRE2.tar.bz2" && cd "pcre2-$PCRE2"
./configure --disable-shared --enable-static --prefix=/opt/pcre2
make -j"$(nproc)" && make install
cd /tmp
第4步 — 构建静态 Nmap (7.98)
NMAP=7.98
curl -fsSLO "https://nmap.org/dist/nmap-$NMAP.tar.bz2"
tar xjf "nmap-$NMAP.tar.bz2" && cd "nmap-$NMAP"
export CPPFLAGS="-I/opt/ossl/include -I/opt/pcre2/include"
export LDFLAGS="-L/opt/ossl/lib -L/opt/pcre2/lib -static -static-libstdc++ -static-libgcc"
export LIBS="-lpcre2-8 -ldl -lpthread -lz"
./configure \
--with-openssl=/opt/ossl \
--with-libpcre=/opt/pcre2 \
--with-libpcap=included \
--with-libdnet=included \
--without-zenmap --without-ndiff --without-nmap-update
# Avoid building shared libpcap by accident
sed -i -e "s/^shared: /shared: #/" libpcap/Makefile || true
make -j1 V=1 nmap
strip nmap
要点
- -static, -static-libstdc++, -static-libgcc 强制静态链接。
- 使用 –with-libpcap=included/–with-libdnet=included 避免使用系统共享库。
- sed 的调整会使存在的共享 libpcap 目标失效。
步骤 5 — 打包二进制和 NSE 数据
mkdir -p /out/nmap-bundle/nmap-data
cp nmap /out/nmap-bundle/nmap-linux-amd64-static
cp -r scripts nselib /out/nmap-bundle/nmap-data/
cp nse_main.lua nmap-services nmap-protocols nmap-service-probes \
nmap-mac-prefixes nmap-os-db nmap-payloads nmap-rpc \
/out/nmap-bundle/nmap-data/ 2>/dev/null || true
tar -C /out -czf /out/nmap-linux-amd64-static-bundle.tar.gz nmap-bundle
验证与运维说明
- 对 artifact 使用 file 命令以确认其为静态链接。
- 将 NSE 数据与二进制文件一起保留,以确保在未安装 Nmap 的主机上脚本的一致性。
- 即使是静态二进制,执行也可能被 AppArmor/seccomp/SELinux 阻止;但 DNS/egress 仍必须可用。
- 确定性构建比下载不透明的“静态”二进制文件能降低供应链风险。
One-liner (Dockerized)
构建、打包并打印 artifact 信息
```bash docker run --rm --platform=linux/amd64 -v "$(pwd)":/out -w /tmp ubuntu:22.04 bash -lc ' set -euo pipefail export DEBIAN_FRONTEND=noninteractive apt-get update && apt-get install -y --no-install-recommends \ build-essential ca-certificates curl bzip2 xz-utils pkg-config perl python3 file git \ automake autoconf libtool m4 zlib1g-devOSSL=“1.1.1w”; curl -fsSLO “https://www.openssl.org/source/openssl-$OSSL.tar.gz”
&& tar xzf “openssl-$OSSL.tar.gz” && cd “openssl-$OSSL”
&& ./Configure no-shared no-zlib linux-x86_64 -static –prefix=/opt/ossl
&& make -j“$(nproc)“ && make install_sw && cd /tmp
PCRE2=10.43; curl -fsSLO “https://github.com/PCRE2Project/pcre2/releases/download/pcre2-$PCRE2/pcre2-$PCRE2.tar.bz2”
&& tar xjf “pcre2-$PCRE2.tar.bz2” && cd “pcre2-$PCRE2”
&& ./configure –disable-shared –enable-static –prefix=/opt/pcre2
&& make -j“$(nproc)“ && make install && cd /tmp
NMAP=7.98; curl -fsSLO “https://nmap.org/dist/nmap-$NMAP.tar.bz2”
&& tar xjf “nmap-$NMAP.tar.bz2” && cd “nmap-$NMAP”
&& export CPPFLAGS=“-I/opt/ossl/include -I/opt/pcre2/include”
&& export LDFLAGS=“-L/opt/ossl/lib -L/opt/pcre2/lib -static -static-libstdc++ -static-libgcc”
&& export LIBS=“-lpcre2-8 -ldl -lpthread -lz”
&& ./configure –with-openssl=/opt/ossl –with-libpcre=/opt/pcre2 –with-libpcap=included –with-libdnet=included –without-zenmap –without-ndiff –without-nmap-update
&& sed -i -e “s/^shared: /shared: #/” libpcap/Makefile || true
&& make -j1 V=1 nmap && strip nmap
mkdir -p /out/nmap-bundle/nmap-data
&& cp nmap /out/nmap-bundle/nmap-linux-amd64-static
&& cp -r scripts nselib /out/nmap-bundle/nmap-data/
&& cp nse_main.lua nmap-services nmap-protocols nmap-service-probes nmap-mac-prefixes nmap-os-db nmap-payloads nmap-rpc /out/nmap-bundle/nmap-data/ 2>/dev/null || true
&& tar -C /out -czf /out/nmap-linux-amd64-static-bundle.tar.gz nmap-bundle
&& echo “===== OUTPUT =====”; ls -lah /out; echo “===== FILE TYPE =====”; file /out/nmap-bundle/nmap-linux-amd64-static || true
’
</details>
## 参考资料
- [Compiling static Nmap binary for jobs in restricted environments](https://www.pentestpartners.com/security-blog/compiling-static-nmap-binary-for-jobs-in-restricted-environments/)
- [Static Nmap Binary Generator (helper tool)](https://github.com/0x5ubt13/static_nmap_binary_generator)
- [OpenSSL sources](https://www.openssl.org/source/)
- [PCRE2 releases](https://github.com/PCRE2Project/pcre2/releases)
- [Nmap source tarballs](https://nmap.org/dist/)
- [Nmap Change Log](https://nmap.org/changelog.html)
- [Nmap Output Formats](https://nmap.org/book/man-output.html)
> [!TIP]
> 学习并实践 AWS Hacking:<img src="../../../../../images/arte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://hacktricks-training.com/courses/arte)<img src="../../../../../images/arte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">\
> 学习并实践 GCP Hacking: <img src="../../../../../images/grte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">[**HackTricks Training GCP Red Team Expert (GRTE)**](https://hacktricks-training.com/courses/grte)<img src="../../../../../images/grte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">\
> 学习并实践 Az Hacking: <img src="../../../../../images/azrte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">[**HackTricks Training Azure Red Team Expert (AzRTE)**](https://hacktricks-training.com/courses/azrte)<img src="../../../../../images/azrte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">
> 浏览用于评估路线的 [**完整 HackTricks Training 目录**](https://hacktricks-training.com/courses/)(**ARTA/GRTA/AzRTA**)以及 [**Linux Hacking Expert (LHE)**](https://hacktricks-training.com/courses/lhe/)。
>
> <details>
>
> <summary>支持 HackTricks</summary>
>
> - 查看 [**订阅方案**](https://github.com/sponsors/carlospolop)!
> - **加入** 💬 [**Discord 群组**](https://discord.gg/hRep4RUj7f)、[**telegram 群组**](https://t.me/peass),**关注** **X/Twitter** 上的 [**@hacktricks_live**](https://twitter.com/hacktricks_live),或查看 [**LinkedIn 页面**](https://www.linkedin.com/company/hacktricks/) 和 [**YouTube 频道**](https://www.youtube.com/@hacktricks_LIVE)。
> - **通过向** [**HackTricks**](https://github.com/carlospolop/hacktricks) 和 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 仓库提交 PR,**分享 hacking 技巧**。
>
> </details>


