Nmap 所有主要参数的详细解释,包括基础参数、高级参数、扫描类型、输出设置等:
└─# nmap --help
Nmap 7.94SVN ( https://nmap.org )
Usage: nmap [Scan Type(s)] [Options] {target specification}
TARGET SPECIFICATION:
---
# Nmap 所有主要参数的详细解释
### TARGET SPECIFICATION:
- 支持的目标格式:主机名、IP 地址、网络范围等。
- 示例:`scanme.nmap.org`、`microsoft.com/24`、`192.168.0.1; 10.0.0-255.1-254`。
-iL <inputfilename>:从文件读取目标列表。
-iR <num hosts>:随机选择指定数量的目标。
--exclude <host1[,host2][,host3],...>:排除指定的主机或网络。
--excludefile <exclude_file>:从文件中读取要排除的目标。
---
### HOST DISCOVERY:
-sL:仅列出目标,不执行扫描。
-sn:Ping 扫描,仅检测主机存活,不扫描端口。
-Pn:跳过 Ping 探测,假定所有主机都在线。
-PS/PA/PU/PY[portlist]:使用 TCP SYN/ACK、UDP 或 SCTP 进行指定端口的探测。
-PE/PP/PM:ICMP Echo、时间戳和地址掩码探测。
-PO[protocol list]:IP 协议探测。
-n/-R:禁用/强制启用 DNS 解析。
--dns-servers <serv1[,serv2],...>:指定自定义 DNS 服务器。
--system-dns:使用操作系统默认的 DNS 解析器。
--traceroute:追踪到目标主机的路由路径。
---
### SCAN TECHNIQUES:
-sS:TCP SYN 扫描(半开放扫描)。
-sT:TCP Connect 扫描。
-sU:UDP 扫描。
-sA:ACK 扫描,探测防火墙规则。
-sW:窗口扫描,识别开放端口。
-sM:Maimon 扫描,绕过防火墙。
-sN/sF/sX:TCP Null、FIN 和 Xmas 扫描。
--scanflags <flags>:自定义 TCP 扫描标志。
-sI <zombie host[:probeport]>:Idle 扫描,利用僵尸主机伪装。
-sY/sZ:SCTP INIT/COOKIE-ECHO 扫描。
-sO:IP 协议扫描。
-b <FTP relay host>:FTP 反弹扫描。
---
### PORT SPECIFICATION AND SCAN ORDER:
-p <port ranges>:仅扫描指定端口范围(示例:`-p 22` 或 `-p 1-65535`)。
--exclude-ports <port ranges>:排除指定的端口范围。
-F:快速扫描模式,扫描默认的常见端口。
-r:按顺序扫描端口(不随机化)。
--top-ports <number>:扫描最常见的指定数量端口。
--port-ratio <ratio>:扫描比率高于指定值的端口。
---
### SERVICE/VERSION DETECTION:
-sV:探测服务版本。
--version-intensity <level>:设置探测强度(0-9,默认 7)。
--version-light:轻量服务探测(强度 2)。
--version-all:尝试所有探测方法(强度 9)。
--version-trace:显示探测活动的详细日志。
---
### SCRIPT SCAN:
-sC:使用默认脚本扫描(等同于 `--script=default`)。
--script=<Lua scripts>:加载指定脚本或脚本类别。
- 示例:`--script vuln`。
--script-args=<n1=v1,...>:为脚本传递参数。
- 示例:`--script-args user=admin,pass=1234`。
--script-args-file=filename:从文件中加载脚本参数。
--script-trace:显示脚本的详细运行日志。
--script-updatedb:更新脚本数据库。
--script-help=<Lua scripts>:显示脚本的帮助信息。
---
### OS DETECTION:
-O:启用操作系统检测。
--osscan-limit:仅对疑似在线的目标进行操作系统检测。
--osscan-guess:更积极地猜测操作系统。
---
### TIMING AND PERFORMANCE:
-T<0-5>:设置扫描速度模板(0 慢,5 快)。
--min-hostgroup/max-hostgroup <size>:设置主机组大小。
--min-parallelism/max-parallelism <numprobes>:设置并行探测数量。
--min-rate/max-rate <rate>:设置最小/最大包发送速率。
--host-timeout <time>:指定单目标的超时时间。
--scan-delay/--max-scan-delay <time>:调整探测间隔时间。
---
### FIREWALL/IDS EVASION AND SPOOFING:
-f/--mtu <val>:分片数据包。
-D <decoy1,decoy2[,ME],...>:伪装扫描来源。
-S <IP_Address>:伪造源地址。
-e <iface>:指定网络接口。
-g/--source-port <portnum>:指定源端口。
--proxies <url1,[url2],...>:通过代理转发连接。
--data <hex string>:附加自定义负载。
--data-length <num>:填充随机数据。
--ttl <val>:设置数据包 TTL 值。
--spoof-mac <mac address/prefix/vendor name>:伪造 MAC 地址。
---
### OUTPUT:
-oN/-oX/-oS/-oG <file>:输出普通文本、XML、脚本和 grep 格式文件。
-oA <basename>:同时输出所有格式。
-v:提高详细程度。
-d:增加调试信息。
--reason:显示端口状态的原因。
--append-output:追加到现有文件。
--resume <filename>:从中断处恢复扫描。
--stylesheet <path/URL>:为 XML 输出设置自定义样式表。
---
### MISC:
-6:启用 IPv6 扫描。
-A:启用操作系统检测、版本检测、脚本扫描和路由追踪。
--datadir <dirname>:指定 Nmap 数据文件位置。
--send-eth/--send-ip:选择使用以太网帧或 IP 数据包发送。
--privileged/--unprivileged:强制启用或禁用原始套接字权限。
-V:打印 Nmap 版本号。
-h:打印帮助信息。
---
如需进一步深入每个参数的应用场景或具体案例,请告诉我!
EXAMPLES:
nmap -v -A scanme.nmap.org
nmap -v -sn 192.168.0.0/16 10.0.0.0/8
nmap -v -iR 10000 -Pn -p 80
SEE THE MAN PAGE (https://nmap.org/book/man.html) FOR MORE OPTIONS AND EXAMPLES
Nmap 所有主要参数的详细解释
TARGET SPECIFICATION:
支持的目标格式:主机名、IP 地址、网络范围等。
示例:scanme.nmap.org、microsoft.com/24、192.168.0.1; 10.0.0-255.1-254。
-iL :从文件读取目标列表。
-iR :随机选择指定数量的目标。
--exclude <host1[,host2][,host3],...>:排除指定的主机或网络。
--excludefile <exclude_file>:从文件中读取要排除的目标。
HOST DISCOVERY:
-sL:仅列出目标,不执行扫描。
-sn:Ping 扫描,仅检测主机存活,不扫描端口。
-Pn:跳过 Ping 探测,假定所有主机都在线。
-PS/PA/PU/PY[portlist]:使用 TCP SYN/ACK、UDP 或 SCTP 进行指定端口的探测。
-PE/PP/PM:ICMP Echo、时间戳和地址掩码探测。
-PO[protocol list]:IP 协议探测。
-n/-R:禁用/强制启用 DNS 解析。
--dns-servers <serv1[,serv2],...>:指定自定义 DNS 服务器。
--system-dns:使用操作系统默认的 DNS 解析器。
--traceroute:追踪到目标主机的路由路径。
SCAN TECHNIQUES:
-sS:TCP SYN 扫描(半开放扫描)。
-sT:TCP Connect 扫描。
-sU:UDP 扫描。
-sA:ACK 扫描,探测防火墙规则。
-sW:窗口扫描,识别开放端口。
-sM:Maimon 扫描,绕过防火墙。
-sN/sF/sX:TCP Null、FIN 和 Xmas 扫描。
--scanflags :自定义 TCP 扫描标志。
-sI <zombie host[:probeport]>:Idle 扫描,利用僵尸主机伪装。
-sY/sZ:SCTP INIT/COOKIE-ECHO 扫描。
-sO:IP 协议扫描。
-b :FTP 反弹扫描。
PORT SPECIFICATION AND SCAN ORDER:
-p :仅扫描指定端口范围(示例:-p 22 或 -p 1-65535)。
--exclude-ports :排除指定的端口范围。
-F:快速扫描模式,扫描默认的常见端口。
-r:按顺序扫描端口(不随机化)。
--top-ports :扫描最常见的指定数量端口。
--port-ratio :扫描比率高于指定值的端口。
SERVICE/VERSION DETECTION:
-sV:探测服务版本。
--version-intensity :设置探测强度(0-9,默认 7)。
--version-light:轻量服务探测(强度 2)。
--version-all:尝试所有探测方法(强度 9)。
--version-trace:显示探测活动的详细日志。
SCRIPT SCAN:
-sC:使用默认脚本扫描(等同于 --script=default)。
--script=:加载指定脚本或脚本类别。
示例:--script vuln。
--script-args=<n1=v1,...>:为脚本传递参数。
示例:--script-args user=admin,pass=1234。
--script-args-file=filename:从文件中加载脚本参数。
--script-trace:显示脚本的详细运行日志。
--script-updatedb:更新脚本数据库。
--script-help=:显示脚本的帮助信息。
OS DETECTION:
-O:启用操作系统检测。
--osscan-limit:仅对疑似在线的目标进行操作系统检测。
--osscan-guess:更积极地猜测操作系统。
TIMING AND PERFORMANCE:
-T<0-5>:设置扫描速度模板(0 慢,5 快)。
--min-hostgroup/max-hostgroup :设置主机组大小。
--min-parallelism/max-parallelism :设置并行探测数量。
--min-rate/max-rate :设置最小/最大包发送速率。
--host-timeout :指定单目标的超时时间。
--scan-delay/--max-scan-delay :调整探测间隔时间。
FIREWALL/IDS EVASION AND SPOOFING:
-f/--mtu :分片数据包。
-D <decoy1,decoy2[,ME],...>:伪装扫描来源。
-S <IP_Address>:伪造源地址。
-e :指定网络接口。
-g/--source-port :指定源端口。
--proxies <url1,[url2],...>:通过代理转发连接。
--data :附加自定义负载。
--data-length :填充随机数据。
--ttl :设置数据包 TTL 值。
--spoof-mac <mac address/prefix/vendor name>:伪造 MAC 地址。
OUTPUT:
-oN/-oX/-oS/-oG :输出普通文本、XML、脚本和 grep 格式文件。
-oA :同时输出所有格式。
-v:提高详细程度。
-d:增加调试信息。
--reason:显示端口状态的原因。
--append-output:追加到现有文件。
--resume :从中断处恢复扫描。
--stylesheet <path/URL>:为 XML 输出设置自定义样式表。
MISC:
-6:启用 IPv6 扫描。
-A:启用操作系统检测、版本检测、脚本扫描和路由追踪。
--datadir :指定 Nmap 数据文件位置。
--send-eth/--send-ip:选择使用以太网帧或 IP 数据包发送。
--privileged/--unprivileged:强制启用或禁用原始套接字权限。
-V:打印 Nmap 版本号。
-h:打印帮助信息。Nmap 所有主要参数的详细解释
(目标指定)
TARGET SPECIFICATION:
支持的目标格式:主机名、IP 地址、网络范围等。
示例:
scanme.nmap.org、microsoft.com/24、192.168.0.1; 10.0.0-255.1-254。
-iL :从文件读取目标列表。
-iR :随机选择指定数量的目标。
--exclude <host1[,host2][,host3],...>:排除指定的主机或网络。
--excludefile <exclude_file>:从文件中读取要排除的目标。
(主机发现)
HOST DISCOVERY:
-sL:仅列出目标,不执行扫描。
-sn:Ping 扫描,仅检测主机存活,不扫描端口。
-Pn:跳过 Ping 探测,假定所有主机都在线。
-PS/PA/PU/PY[portlist]:使用 TCP SYN/ACK、UDP 或 SCTP 进行指定端口的探测。
-PE/PP/PM:ICMP Echo、时间戳和地址掩码探测。
-PO[protocol list]:IP 协议探测。
-n/-R:禁用/强制启用 DNS 解析。
--dns-servers <serv1[,serv2],...>:指定自定义 DNS 服务器。
--system-dns:使用操作系统默认的 DNS 解析器。
--traceroute:追踪到目标主机的路由路径。
(扫描技术)
SCAN TECHNIQUES:
-sS:TCP SYN 扫描(半开放扫描)。
-sT:TCP Connect 扫描。
-sU:UDP 扫描。
-sA:ACK 扫描,探测防火墙规则。
-sW:窗口扫描,识别开放端口。
-sM:Maimon 扫描,绕过防火墙。
-sN/sF/sX:TCP Null、FIN 和 Xmas 扫描。
--scanflags :自定义 TCP 扫描标志。
-sI <zombie host[:probeport]>:Idle 扫描,利用僵尸主机伪装。
-sY/sZ:SCTP INIT/COOKIE-ECHO 扫描。
-sO:IP 协议扫描。
-b :FTP 反弹扫描。
(端口指定与扫描顺序)
PORT SPECIFICATION AND SCAN ORDER:
-p :仅扫描指定端口范围(示例:
-p 22或-p 1-65535)。--exclude-ports :排除指定的端口范围。
-F:快速扫描模式,扫描默认的常见端口。
-r:按顺序扫描端口(不随机化)。
--top-ports :扫描最常见的指定数量端口。
--port-ratio :扫描比率高于指定值的端口。
(服务与版本探测)
SERVICE/VERSION DETECTION:
-sV:探测服务版本。
--version-intensity :设置探测强度(0-9,默认 7)。
--version-light:轻量服务探测(强度 2)。
--version-all:尝试所有探测方法(强度 9)。
--version-trace:显示探测活动的详细日志。
(脚本扫描)
SCRIPT SCAN:
-sC:使用默认脚本扫描(等同于
--script=default)。--script=:加载指定脚本或脚本类别。
示例:
--script vuln。
--script-args=<n1=v1,...>:为脚本传递参数。
示例:
--script-args user=admin,pass=1234。
--script-args-file=filename:从文件中加载脚本参数。
--script-trace:显示脚本的详细运行日志。
--script-updatedb:更新脚本数据库。
--script-help=:显示脚本的帮助信息。
(操作系统探测)
OS DETECTION:
-O:启用操作系统检测。
--osscan-limit:仅对疑似在线的目标进行操作系统检测。
--osscan-guess:更积极地猜测操作系统。
(时间与性能优化)
TIMING AND PERFORMANCE:
-T<0-5>:设置扫描速度模板(0 慢,5 快)。
--min-hostgroup/max-hostgroup :设置主机组大小。
--min-parallelism/max-parallelism :设置并行探测数量。
--min-rate/max-rate :设置最小/最大包发送速率。
--host-timeout :指定单目标的超时时间。
--scan-delay/--max-scan-delay :调整探测间隔时间。
(防火墙/IDS 绕过与伪装)
FIREWALL/IDS EVASION AND SPOOFING:
-f/--mtu :分片数据包。
-D <decoy1,decoy2[,ME],...>:伪装扫描来源。
-S <IP_Address>:伪造源地址。
-e :指定网络接口。
-g/--source-port :指定源端口。
--proxies <url1,[url2],...>:通过代理转发连接。
--data :附加自定义负载。
--data-length :填充随机数据。
--ttl :设置数据包 TTL 值。
--spoof-mac <mac address/prefix/vendor name>:伪造 MAC 地址。
(输出)OUTPUT:
-oN/-oX/-oS/-oG :输出普通文本、XML、脚本和 grep 格式文件。
-oA :同时输出所有格式。
-v:提高详细程度。
-d:增加调试信息。
--reason:显示端口状态的原因。
--append-output:追加到现有文件。
--resume :从中断处恢复扫描。
--stylesheet <path/URL>:为 XML 输出设置自定义样式表。
(杂项)MISC:
-6:启用 IPv6 扫描。
-A:启用操作系统检测、版本检测、脚本扫描和路由追踪。
--datadir :指定 Nmap 数据文件位置。
--send-eth/--send-ip:选择使用以太网帧或 IP 数据包发送。
--privileged/--unprivileged:强制启用或禁用原始套接字权限。
-V:打印 Nmap 版本号。
-h:打印帮助信息。
如需进一步深入每个参数的应用场景或具体案例,请告诉我!
基础参数
1. 主机发现(Host Discovery)
-sn:仅主机发现,不进行端口扫描。
-Pn:跳过 Ping 探测,假设所有主机存活。
-PS:TCP SYN Ping,指定端口。
-PA:TCP ACK Ping,指定端口。
-PU:UDP Ping,指定端口。
-PE:ICMP Echo 请求。
-PP:ICMP 时间戳 Ping。
-PM:ICMP 地址掩码 Ping。
2. 端口扫描(Port Scanning)
-sS:TCP SYN 扫描(半开放扫描)。
-sT:TCP Connect 扫描。
-sU:UDP 扫描。
-sA:ACK 扫描,用于探测防火墙规则。
-sW:窗口扫描,识别开放端口。
-sM:TCP Maimon 扫描,绕过防火墙。
-p:指定扫描的端口范围(例如:
-p 80或-p 1-1000)。--top-ports:扫描常见的端口(例如
--top-ports 100)。--port-ratio:根据端口比例选择扫描。
3. 服务和版本探测
-sV:服务版本探测。
--version-intensity:调整服务探测的强度(0-9,默认7)。
--version-light:轻量级服务探测。
--version-all:尝试所有探测方法。
4. 操作系统与设备探测
-O:启用操作系统探测。
--osscan-limit:仅扫描疑似在线的主机。
--osscan-guess:猜测操作系统。
高级参数
1. 绕过防火墙和 IDS
-f:分片数据包。
--mtu:设置分片大小。
--data-length:在数据包中填充随机数据。
--ip-options:设置 IP 选项。
--spoof-mac:伪造 MAC 地址(例如
--spoof-mac 0:11:22:33:44:55或随机值)。--source-port:指定源端口。
--badsum:发送校验和错误的数据包。
2. 扫描时间与性能优化
-T<0-5>:调整扫描速度(0 为最慢,5 为最快)。
--min-rate:设置最小发送包速率(例如
--min-rate 1000)。--max-rate:设置最大发送包速率。
--scan-delay:两次扫描之间的最小间隔。
--max-scan-delay:设置最大扫描间隔。
--host-timeout:设置每个主机的超时时间(例如
--host-timeout 30s)。--min-hostgroup/--max-hostgroup:设置同时扫描的主机数量。
3. 扫描脚本(NSE 脚本引擎)
--script :指定使用的脚本(例如
--script vuln)。--script-args:向脚本传递参数(例如
--script-args user=admin,pass=1234)。--script-args-file:从文件中读取脚本参数。
--script-trace:显示脚本的运行过程。
--script-updatedb:更新脚本数据库。
4. 输出控制
-oN <file>:将扫描结果以普通文本格式输出到指定文件中。
-oX <file>:将扫描结果以 XML 格式输出到指定文件中。
-oS <file>:将扫描结果以 "s|<rIpt kIddi3"(脚本小子风格)格式输出到指定文件中。
-oG <file>:将扫描结果以 Grepable(便于 grep 搜索的)格式输出到指定文件中。
-oA <basename>:同时将扫描结果保存为上述三种格式(普通文本、XML 和 Grepable),文件名使用指定的
basename作为前缀。-v:增加输出的详细程度。
使用
-vv或更多可进一步增加详细程度。
-d:增加调试级别输出,用于问题排查。
使用
-dd或更多以获得更详细的调试信息。
--reason:显示端口状态的原因。例如,显示一个端口是开放的原因。
--open:仅显示开放端口或可能开放的端口。
--packet-trace:显示所有发送和接收的网络数据包,便于调试或深入分析。
--iflist:列出主机的网络接口和路由信息,用于调试网络配置。
--append-output:将扫描结果附加到指定的输出文件,而不是覆盖已有内容。
--resume <filename>:恢复上次中断的扫描,扫描结果将从
<filename>文件中继续。--noninteractive:禁用扫描过程中的交互操作,适合脚本自动化使用。
--stylesheet <path/URL>:指定 XSL 样式表路径或 URL,用于将 XML 输出转换为 HTML 格式。
--webxml:在 XML 输出中引用 Nmap 官方提供的样式表(https://nmap.org)。
这样可以生成更具可移植性的 XML 文件。--no-stylesheet:禁止在 XML 输出中关联 XSL 样式表。
如果你还有其他需求,随时告诉我!
-oN :输出普通文本格式到文件。
-oX :输出 XML 格式到文件。
-oG :输出易于解析的 grepable 格式。
-oA :同时生成所有三种格式的输出文件。
--append-output:追加扫描结果到现有文件。
--resume :从中断的扫描中恢复。
--stylesheet :自定义 XML 样式表。
5. 调试与日志
-v:启用详细输出模式(可多次使用,如
-vv)。--packet-trace:显示每个发送/接收的包。
--open:仅显示开放的端口。
--reason:显示端口状态的理由。
--stats-every:定期显示扫描统计信息(例如
--stats-every 10s)。--log-errors:记录错误信息。
常见扫描类型与应用场景
1. 存活探测
nmap -sn 192.168.1.0/24
2. 快速扫描(默认扫描 100 个常见端口)
nmap -F 192.168.1.0/24
3. 服务与版本探测
nmap -sS -sV -p 80,443 192.168.1.1
4. 操作系统探测
nmap -O 192.168.1.1
5. 脚本扫描
nmap --script vuln 192.168.1.1
NSE 脚本分类与示例
Nmap Scripting Engine(NSE)分为以下几类:
auth:认证相关脚本(例如
smb-brute)。broadcast:局域网广播脚本(例如
broadcast-dhcp-discover)。brute:暴力破解脚本(例如
ftp-brute)。default:默认脚本(例如
default)。discovery:信息发现脚本(例如
dns-brute)。dos:拒绝服务攻击脚本(例如
http-slowloris)。exploit:漏洞利用脚本(例如
http-vuln-cve2017-5638)。external:外部脚本。
fuzzer:模糊测试脚本(例如
http-fuzz)。intrusive:侵入性脚本(例如
http-sql-injection)。malware:恶意软件脚本。
safe:安全脚本。
version:服务版本探测脚本。
vuln:漏洞检测脚本。
主机发现的代码算法
Nmap 的主机发现和扫描算法复杂而强大,能够根据网络状况自动调整扫描节奏,确保结果的准确性和效率。通过拥塞控制、往返时间估算、自适应重传等多种算法,Nmap 实现了对大规模网络的高效扫描。此外,用户还可以通过调整 min-rate 和 --max-retries 等参数对扫描行为进行更细致的控制,适应不同的应用场景。
代码机制与包追踪
源代码分析:Nmap 作为一款开源软件,其源代码始终是了解其运行机制的重要资源之一。通过分析源代码,可以追踪每一个细节。然而,对于大多数用户来说,直接研究代码并不是最简单的途径。
packet-trace选项:使用户能够看到工具发送和接收的所有数据包,从而直观地了解其运行细节。
主机发现的分块与 ultra_scan 引擎
分块处理:Nmap 扫描大量主机时,会将这些主机划分为若干块,每一块可以包含多至几百到几千个主机。这些块通过
ultra_scan进行处理,这是 Nmap 的通用扫描引擎,负责发送、接收和解释数据包。
探测包发送与响应标记机制
扫描时,Nmap 并不会一次性发送所有探测包,而是先发送一个探测包到所有目标主机,等待响应,然后再发送下一个探测包。
当接收到有效响应时,该主机会被标记为“存活”,不再发送额外探测包。
若目标主机在所有探测包重试后仍无响应,则标记为“不可达”。
多种扫描方式与复杂因子处理
支持的扫描方式:包括 SYN、UDP、NULL、FIN、Xmas 等。
处理复杂因子:不仅要考虑端口和主机的并行化问题,还需估算网络延迟、检测数据包丢失等。
状态记录与无状态扫描器对比
与其他一些简单的扫描器不同,Nmap 保存了大量状态信息(如序列号、源/目标端口等),能够识别响应并根据网络情况调整发送速度。
无状态扫描器通过大批量发送数据包的方式虽然可以提高速度,但无法检测到数据包丢失,导致准确性下降。
用户控制的参数设置
用户可通过
min-rate设置每秒发送的数据包数量,以及--max-retries设置最大重传次数。需谨慎使用这些参数,因为它们可能导致扫描结果不准确。
并行扫描与动态调整
Nmap 允许同时扫描多台主机及多个端口,大幅提高了扫描效率。
根据网络状况及用户指定的参数(如
-min-hostgroup和-T4),Nmap 会动态调整扫描的并行程度。如果某台主机负载过高,Nmap 会自动减缓对该主机的扫描速度。
RTT 计算与扫描节奏调整
每当收到探测包的响应时,Nmap 会计算从发送到接收的时间(RTT,往返时间)。
根据 RTT 值,Nmap 会更新以下三个时间参数:
srtt:平滑的平均往返时间。
rttvar:往返时间的偏差。
timeout:超时时间。
这些值的计算类似于 TCP 的重传定时算法,帮助 Nmap 动态调整扫描节奏。
拥塞控制算法的关键机制
借鉴了 TCP 中的三个关键机制:
拥塞窗口:限制同时发送的探测包数量。
指数回退:在检测到数据包丢失时减缓扫描速度。
慢启动:逐步增加扫描速度,直至达到最佳网络性能。
拥塞控制与数据包丢失的处理
在拥塞控制中,如果探测包丢失,Nmap 会降低拥塞窗口值。
当网络条件变好时,拥塞窗口长度将缓慢增加,确保不会占用过多网络资源。
Nmap 会根据接收到的响应与发送探测包之间的比例调整扫描速度,这在面对大量防火墙过滤时尤为重要。
自适应重传与数据包丢失检测
Nmap 根据实际丢包情况进行自适应重传。
丢包率较低时,可能只重传一次探测包。
丢包率较高时,可能重传十次甚至更多。
当达到一定重传次数后,Nmap 会放弃进一步重传,并标记该端口为不可达。
扫描延迟与丢包控制
当响应速率较低时,Nmap 会自动插入扫描延迟。
如果探测包大量丢弃,Nmap 会逐渐增加探测包之间的延迟时间,直至丢包情况减少。
用户可通过
--max-scan-delay参数限制最大扫描延迟,加快扫描过程。
-.-
评论区