GoGPT Best VPN GoSearch

OnWorks 网站图标

nmap - 云端在线

通过 Ubuntu Online、Fedora Online、Windows 在线模拟器或 MAC OS 在线模拟器在 OnWorks 免费托管服务提供商中运行 nmap

这是命令 nmap,可以使用我们的多个免费在线工作站之一在 OnWorks 免费托管服务提供商中运行,例如 Ubuntu Online、Fedora Online、Windows 在线模拟器或 MAC OS 在线模拟器

程序:

您的姓名


nmap - 网络探索工具和安全/端口扫描器

概要


NMAP [Scan 扫描 类型...] [可选项] {目标 规范}

商品描述


Nmap(“Network Mapper”)是一个用于网络探索和安全的开源工具
审计。 它旨在快速扫描大型网络,尽管它适用于
单主机。 Nmap 以新颖的方式使用原始 IP 数据包来确定哪些主机可用
在网络上,这些主机提供哪些服务(应用程序名称和版本),
他们正在运行什么操作系统(和操作系统版本),什么类型的数据包
过滤器/防火墙正在使用中,以及许多其他特性。 虽然 Nmap 通常是
用于安全审计,许多系统和网络管理员发现它对
日常任务,例如网络库存、管理服务升级计划,以及
监控主机或服务的正常运行时间。

Nmap 的输出是一个扫描目标列表,每个目标都有补充信息
取决于所使用的选项。 这些信息中的关键是“有趣的港口
table”.. 该表列出了端口号和协议、服务名称和状态。 这
状态为打开、过滤、关闭或未过滤。 打开。 意味着一个应用程序
目标机器上正在侦听该端口上的连接/数据包。 过滤。 方法
防火墙、过滤器或其他网络障碍正在阻塞端口,因此 Nmap
分不清是开还是关。 关闭。 端口没有应用程序监听
他们,虽然他们可以随时打开。 端口被归类为未过滤。 什么时候
它们响应 Nmap 的探测,但 Nmap 无法确定它们是打开还是
关闭。 Nmap 报告打开|过滤的状态组合。 并关闭|过滤。 当它
无法确定这两种状态中的哪一种描述了一个端口。 端口表还可能包括
请求版本检测时的软件版本详细信息。 当一个 IP 协议
请求扫描(-所以),Nmap 提供有关支持的 IP 协议的信息,而不是
监听端口。

除了有趣的端口表之外,Nmap 还可以提供关于
目标,包括反向 DNS 名称、操作系统猜测、设备类型和 MAC
地址。

示例 1 中显示了典型的 Nmap 扫描。此示例中使用的唯一 Nmap 参数
旨在 -A, 启用操作系统和版本检测、脚本扫描和跟踪路由; -T4 HPMC胶囊
更快的执行; 然后是主机名。

例如: 1. A 代表 NMAP 浏览

# NMAP -A -T4 scanme.nmap.org网站

scanme.nmap.org (74.207.244.221) 的 Nmap 扫描报告
主机已启动(0.029秒延迟)。
74.207.244.221 的 rDNS 记录:li86-221.members.linode.com
未显示:995个关闭的端口
港口国服务版本
22/tcp 打开 ssh OpenSSH 5.3p1 Debian 3ubuntu7(协议 2.0)
| ssh-hostkey: 1024 8d:60:f1:7c:ca:b7:3d:0a:d6:67:54:9d:69:d9:b9:dd (DSA)
|_2048 79:f8:09:ac:d4:e2:32:42:10:49:d3:bd:20:82:85:ec (RSA)
80/tcp 打开 http Apache httpd 2.2.14 ((Ubuntu))
|_http-title: 来吧,ScanMe!
646/tcp 过滤的 ldp
1720/tcp 过滤 H.323/Q.931
9929/tcp 打开 nping-echo Nping echo
设备类型:通用
运行:Linux 2.6.X
操作系统 CPE:cpe:/o:linux:linux_kernel:2.6.39
操作系统详情:Linux 2.6.39
网络距离:11跳
服务信息:操作系统:Linux; CPE: cpe:/o:linux:kernel

TRACEROUTE(使用端口 53/tcp)
跳 RTT 地址
[为简洁起见,剪掉前 10 个啤酒花]
11 17.65 毫秒 li86-221.members.linode.com (74.207.244.221)

已完成Nmap:在1秒内扫描了1个IP地址(14.40个主机已启动)

最新版本的 Nmap 可以从 https://nmap.org. 最新版本的
该手册页位于 https://nmap.org/book/man.html. 它也被列为
Nmap 网络扫描章节:官方 Nmap 网络发现和项目指南
安全扫描(见 https://nmap.org/book/).

配置 概要


当 Nmap 不带参数运行时打印此选项摘要,最新版本
始终可用 https://svn.nmap.org/nmap/docs/nmap.usage.txt. 它帮助人们
记住最常见的选项,但不能替代 中的深入文档
本手册的其余部分。 一些晦涩的选项甚至不包括在这里。

Nmap 7.01 (https://nmap.org)
用法:nmap [扫描类型] [选项] {目标规范}
目标规格:
可以传递主机名、IP 地址、网络等。
例如:scanme.nmap.org、microsoft.com/24、192.168.0.1; 10.0.0-255.1-254
-iL : 从主机/网络列表输入
-iR :选择随机目标
- 排除: 排除主机/网络
--排除文件: 从文件中排除列表
主机发现:
-sL:列表扫描 - 简单地列出要扫描的目标
-sn:Ping 扫描 - 禁用端口扫描
-Pn:将所有主机视为在线——跳过主机发现
-PS/PA/PU/PY[端口列表]:TCP SYN/ACK、UDP 或 SCTP 发现到给定端口
-PE/PP/PM:ICMP 回声、时间戳和网络掩码请求发现探测
-PO[协议列表]:IP协议Ping
-n/-R:从不进行 DNS 解析/始终解析 [默认:有时]
--dns-服务器: 指定自定义 DNS 服务器
--system-dns:使用操作系统的 DNS 解析器
--traceroute:跟踪每台主机的跳跃路径
扫描技术:
-sS/sT/sA/sW/sM:TCP SYN/Connect()/ACK/Window/Maimon 扫描
-sU:UDP 扫描
-sN/sF/sX:TCP Null、FIN 和 Xmas 扫描
--scanflags : 自定义 TCP 扫描标志
-sI : 空闲扫描
-sY/sZ:SCTP INIT/COOKIE-ECHO 扫描
-sO:IP协议扫描
-b : FTP 弹跳扫描
端口规格和扫描顺序:
-p : 只扫描指定端口
例如:-p22; -p1-65535; -p U:53,111,137,T:21-25,80,139,8080,S:9
--排除端口: 从扫描中排除指定的端口
-F:快速模式 - 扫描比默认扫描更少的端口
-r:连续扫描端口 - 不要随机化
--top-ports : 扫描最常见的端口
--端口比率: 比扫描端口更常见
服务/版本检测:
-sV:探测开放端口以确定服务/版本信息
--版本强度:设置从 0(光)到 9(尝试所有探头)
--version-light:限制为最可能的探测(强度 2)
--version-all:尝试每个探针(强度 9)
--version-trace:显示详细的版本扫描活动(用于调试)
脚本扫描:
-sC:相当于--script=default
--脚本= : 是逗号分隔的列表
目录、脚本文件或脚本类别
--script-args= : 为脚本提供参数
--script-args-file=filename: 在文件中提供 NSE 脚本参数
--script-trace:显示所有发送和接收的数据
--script-updatedb:更新脚本数据库。
--script-help = :显示有关脚本的帮助。
是一个逗号分隔的脚本文件列表或
脚本类别。
操作系统检测:
-O:启用操作系统检测
--osscan-limit:将操作系统检测限制为有希望的目标
--osscan-guess:更积极地猜测操作系统
时间和性能:
采取的选项以秒为单位,或附加“ms”(毫秒),
“s”(秒)、“m”(分钟)或“h”(小时)到值(例如 30m)。
-T<0-5>:设置时序模板(越高越快)
--最小主机组/最大主机组: 并行主机扫描组大小
--min-parallelism/max-parallelism : 探针并行化
--min-rtt-timeout/max-rtt-timeout/initial-rtt-timeout : 指定
探测往返时间。
-最大重试:端口扫描探针重传的最大次数。
--主机超时: 这么长时间后放弃目标
--scan-delay/--max-scan-delay : 调整探头之间的延迟
--min-rate : 发送数据包不慢于每秒
--最大速率: 发送数据包的速度不超过每秒
防火墙/IDS 逃避和欺骗:
-F; --mtu :分段数据包(可选w/给定的MTU)
-D :用诱饵掩盖扫描
-S : 欺骗源地址
-e : 使用指定接口
-g/--source-port : 使用给定的端口号
--代理: 通过 HTTP/SOCKS1 代理中继连接
- 数据:将自定义负载附加到发送的数据包
--数据字符串: 将自定义 ASCII 字符串附加到发送的数据包
--数据长度: 将随机数据附加到发送的数据包中
--ip-选项: 使用指定的 ip 选项发送数据包
--ttl : 设置 IP 生存时间字段
--spoof-mac :欺骗你的MAC地址
--badsum:发送带有伪造 TCP/UDP/SCTP 校验和的数据包
输出:
-oN/-oX/-oS/-oG : 正常输出扫描,XML,s|
和 Grepable 格式,分别为给定的文件名。
-oA : 一次输出三种主要格式
-v:增加详细级别(使用 -vv 或更多以获得更大的效果)
-d:提高调试级别(使用 -dd 或更多以获得更大的效果)
--reason:显示端口处于特定状态的原因
--open:只显示开放(或可能开放)的端口
--packet-trace:显示所有发送和接收的数据包
--iflist:打印主机接口和路由(用于调试)
--append-output:附加到而不是破坏指定的输出文件
- 恢复: 恢复中止的扫描
--样式表: XSL 样式表将 XML 输出转换为 HTML
--webxml:来自 Nmap.Org 的参考样式表以获得更可移植的 XML
--no-stylesheet:防止将 XSL 样式表与 XML 输出相关联
MISC:
-6:启用 IPv6 扫描
-A:启用操作系统检测、版本检测、脚本扫描和traceroute
--数据目录: 指定自定义 Nmap 数据文件位置
--send-eth/--send-ip:使用原始以太网帧或 IP 数据包发送
--privileged:假设用户拥有完全特权
--unprivileged:假设用户没有原始套接字权限
-V:打印版本号
-h:打印此帮助摘要页。
例子:
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
有关更多选项和示例,请参阅手册页 (https://nmap.org/book/man.html)

TARGET 规格


处理 Nmap 命令行上不是选项(或选项参数)的所有内容
作为目标主机规范。 最简单的情况是指定目标 IP 地址或
用于扫描的主机名。

有时您希望扫描相邻主机的整个网络。 为此,Nmap 支持
CIDR 风格。 寻址。 您可以附加 /数位 到 IPv4 地址或主机名和 Nmap
将扫描每个 IP 地址,其中第一个 数位 与参考相同
给定的 IP 或主机名。 例如,192.168.10.0/24 将扫描 256 个主机之间的
192.168.10.0(二进制:11000000 10101000 00001010 00000000)和 192.168.10.255(二进制:
11000000 10101000 00001010 11111111),包括。 192.168.10.40/24 将准确扫描
相同的目标。 鉴于主机 scanme.nmap.org。 位于 IP 地址 64.13.134.52,
规范 scanme.nmap.org/16 将扫描 65,536 和
64.13.255.255。 允许的最小值是 /0,它针对整个 Internet。 这
最大值是 /32,它只扫描指定的主机或 IP 地址,因为所有地址
位是固定的。

CIDR 表示法很短,但并不总是足够灵活。 例如,您可能想要扫描
192.168.0.0/16 但跳过任何以 .0 或 .255 结尾的 IP,因为它们可能用作子网
网络地址和广播地址。 Nmap 通过八位字节范围寻址支持这一点。 相当
除了指定一个普通的 IP 地址,您还可以指定一个以逗号分隔的数字列表或
每个八位字节的范围。 例如,192.168.0-255.1-254 将跳过所有地址
以 .0 或 .255 结尾的范围,192.168.3-5,7.1 将扫描四个地址
192.168.3.1、192.168.4.1、192.168.5.1 和 192.168.7.1。 范围的任一侧可能是
省略; 默认值是左边的 0 和右边的 255。 使用 - 本身就是
与 0-255 相同,但请记住在第一个八位字节中使用 0- 以便目标规范
看起来不像命令行选项。 范围不必限于最后的八位字节:
说明符 0-255.0-255.13.37 将对所有 IP 地址执行 Internet 范围的扫描
13.37 结束。 这种广泛的抽样对于互联网调查和
研究。

IPv6 地址只能由其完全限定的 IPv6 地址或主机名指定。
IPv6 尚不支持 CIDR 和八位字节范围。

具有非全局范围的 IPv6 地址需要具有区域 ID 后缀。 在 Unix 系统上,这
是一个百分号后跟一个接口名称; 一个完整的地址可能是
fe80::a8bb:ccff:fedd:eeff%eth0。 在 Windows 上,使用接口索引号代替
接口名称:fe80::a8bb:ccff:fedd:eeff%1。 您可以通过以下方式查看接口索引列表
运行命令 使用Netsh.exe 接口 ipv6 显示 接口.

Nmap 在命令行上接受多个主机规范,它们不需要
相同的类型。 命令 NMAP scanme.nmap.org网站 192.168.0.0/8 10.0.0,1,3-7.- 做你想做的事
会期待。

虽然目标通常在命令行上指定,但以下选项也是
可用于控制目标选择:

-iL 输入文件名 (从列表输入)。
读取目标规格 输入文件名. 传递一个巨大的主机列表通常是
在命令行上笨拙,但这是一个普遍的愿望。 例如,您的 DHCP 服务器
可能会导出您希望扫描的 10,000 个当前租约的列表。 或者也许你想要
扫描所有 IP 地址 对于那些使用未经授权的静态 IP 定位主机的人
地址。 只需生成要扫描的主机列表并将该文件名传递给 Nmap 作为
一个论据 -iL 选项。 条目可以是 Nmap 接受的任何格式
在命令行上(IP 地址、主机名、CIDR、IPv6 或八位字节范围)。 每个条目
必须由一个或多个空格、制表符或换行符分隔。 您可以指定一个连字符
(-) 作为文件名,如果你想让 Nmap 从标准输入读取主机而不是一个
实际文件。

输入文件可能包含以 # 开头并扩展到结尾的注释
线。

-iR NUM 为了 (选择随机目标)。
对于 Internet 范围内的调查和其他研究,您可能需要选择以下目标
随机的。 这 NUM 为了 参数告诉 Nmap 要生成多少个 IP。 不受欢迎的 IP
例如在某些私有、多播或未分配地址范围内的那些
自动跳过。 可以为永无止境的扫描指定参数 0。 保持
请记住,一些网络管理员对未经授权的扫描感到愤怒
网络,可能会抱怨。 使用此选项需您自担风险! 如果你发现自己
一个下雨的下午真的很无聊,试试命令 NMAP P -sS -p 80 -iR 0 - 打开。 到
定位随机网络服务器进行浏览。

- 排除 host1[,host2[,...]](排除主机/网络)。
指定要从扫描中排除的目标的逗号分隔列表,即使它们
是您指定的整个网络范围的一部分。 您传入的列表使用正常
Nmap 语法,因此它可以包括主机名、CIDR 网络块、八位字节范围等。这可以
当您要扫描的网络包含不可触及的关键任务时很有用
已知会对端口扫描或子网做出不利反应的服务器、系统
由其他人管理。

--排除文件 排除文件 (从文件中排除列表)。
这提供了与 - 排除 选项,除了被排除的
目标以换行符、空格或制表符分隔 排除文件 而非
在命令行上。

排除文件可能包含以 # 开头并扩展到结尾的注释
线。

主办方 探索


任何网络侦察任务的首要步骤之一是减少
(有时很大)一组 IP 范围到活动或有趣的主机列表中。 扫描
每个 IP 地址的每个端口都很慢,而且通常是不必要的。 当然什么
使主机有趣很大程度上取决于扫描目的。 网络管理员可以
只对运行特定服务的主机感兴趣,而安全审计员可能会关心
关于每个具有 IP 地址的设备。 管理员可能会很舒服地使用
只是一个 ICMP ping 来定位他的内部网络上的主机,而外部渗透
测试人员可能会使用一组不同的几十个探针来逃避防火墙
限制。

由于主机发现需求如此多样化,Nmap 提供了多种选择
定制所使用的技术。 主机发现有时称为 ping 扫描,但它是
远远超出与无处不在的 ping 工具相关的简单 ICMP 回显请求数据包。
用户可以通过列表扫描完全跳过 ping 步骤(-sL) 或通过禁用 ping (P),
或使用多端口 TCP SYN/ACK、UDP、SCTP 的任意组合连接网络
INIT 和 ICMP 探测。 这些调查的目标是征求反应,证明
IP 地址实际上是活动的(正在被主机或网络设备使用)。 在许多
网络,在任何给定时间只有一小部分 IP 地址处于活动状态。 这是
特别常见于私有地址空间,例如 10.0.0.0/8。 该网络有 16
百万个 IP,但我看到它被少于一千台机器的公司使用。 主持人
发现可以在分布稀疏的 IP 地址海洋中找到这些机器。

如果没有给出主机发现选项,Nmap 会发送一个 ICMP 回显请求,一个 TCP SYN 数据包
到端口 443,到端口 80 的 TCP ACK 数据包,以及到 ICMP 时间戳请求。 (对于 IPv6,
ICMP 时间戳请求被省略,因为它不是 ICMPv6 的一部分。)这些默认值是
相当于 聚乙烯 -PS443 -PA80 聚丙烯 选项。 对此的例外是 ARP(对于
IPv4) 和邻居发现。 (对于 IPv6)扫描用于本地上的任何目标
以太网网络。 对于非特权 Unix shell 用户,默认探测是一个 SYN 数据包
使用端口 80 和 443 联接 系统调用.. 这个主机发现通常是
扫描本地网络时足够了,但有一组更全面的发现探针
建议用于安全审计。

这个 -P* 选项(选择 ping 类型)可以组合。 你可以增加你的几率
通过使用不同的 TCP 端口/标志发送许多探测类型来穿透严格的防火墙
和 ICMP 代码。 另请注意 ARP/邻居发现 (-公关)。 默认情况下针对
本地以太网网络上的目标,即使您指定其他 -P* 选项,因为它是
几乎总是更快、更有效。

默认情况下,Nmap 会进行主机发现,然后针对它的每个主机执行端口扫描
确定在线。 即使您指定非默认主机发现类型也是如此
例如 UDP 探测(-PU)。 阅读有关 -sn 学习如何仅执行主机的选项
发现或使用 P 跳过主机发现和端口扫描所有目标主机。 下列
选项控制主机发现:

-sL (列表扫描)。
列表扫描是主机发现的一种退化形式,它简单地列出了
指定的网络,而不向目标主机发送任何数据包。 默认情况下,
Nmap 仍然在主机上进行反向 DNS 解析以了解它们的名称。 经常是
令人惊讶的是,简单的主机名给出了多少有用的信息。 例如,fw.chi
是一家公司的芝加哥防火墙的名称。 Nmap 还报告了总数
IP地址在最后。 列表扫描是一个很好的健全性检查,以确保您有
目标的正确 IP 地址。 如果主机使用域名,您没有
认识到,值得进一步调查以防止扫描错误的公司
网络。

由于这个想法是简单地打印目标主机列表,因此更高级别的选项
端口扫描、操作系统检测或 ping 扫描等功能不能组合使用
有了这个。 如果您希望禁用 ping 扫描同时仍然执行如此高的
级别功能,请阅读 P (跳过 ping)选项。

-sn (无端口扫描)。
这个选项告诉 Nmap 在主机发现后不要做端口扫描,只打印出来
响应主机发现探测的可用主机。 这通常是众所周知的
作为“ping 扫描”,但您也可以请求 traceroute 和 NSE 主机脚本
跑。 默认情况下,这比列表扫描更具侵入性,并且通常可以
用于相同的目的。 它允许对目标网络进行轻度侦察,而无需
备受关注。 知道有多少主机在运行对攻击者来说更有价值
而不是由每个 IP 和主机名的列表扫描提供的列表。

系统管理员通常也发现此选项很有价值。 它可以很容易地使用
计算网络上可用的机器或监控服务器的可用性。 这是经常
称为 ping 扫描,比 ping 广播地址更可靠,因为
许多主机不回复广播查询。

默认主机发现完成 -sn 包含一个 ICMP 回显请求,TCP SYN 到
端口 443,TCP ACK 到端口 80,默认情况下是 ICMP 时间戳请求。 执行时
对于非特权用户,只发送 SYN 数据包(使用 联接 调用)到端口 80
和 443 在目标上。 当特权用户尝试扫描本地目标时
以太网网络,除非使用 ARP 请求 --发送IP 被指定。 这 -sn 选项
可以与任何发现探针类型( -P* 选项,不包括 P)
以获得更大的灵活性。 如果使用任何这些探测类型和端口号选项,
默认探测器被覆盖。 当严格的防火墙在
源主机运行 Nmap 和目标网络,使用这些先进的技术是
受到推崇的。 否则,当防火墙丢弃探测器或它们的探测器时,主机可能会丢失
响应。

在以前的 Nmap 版本中, -sn 被称为 -SP..

P (没有ping)。
此选项完全跳过 Nmap 发现阶段。 通常,Nmap 使用这个阶段
确定用于较重扫描的活动机器。 默认情况下,Nmap 只执行
大量探测,例如端口扫描、版本检测或针对主机的操作系统检测
被发现是了。 禁用主机发现 P 导致 Nmap 尝试
请求的扫描功能 每周 指定的目标 IP 地址。 所以如果一个班
B 目标地址空间(/16)在命令行中指定,所有65,536个IP地址
被扫描。 与列表扫描一样,会跳过正确的主机发现,而不是
停止并打印目标列表,Nmap 继续执行请求的功能
好像每个目标 IP 都处于活动状态。 跳过 ping 扫描 端口扫描,同时仍然允许
NSE运行,使用两个选项 P -sn 在一起。

对于本地以太网网络上的机器,仍将执行 ARP 扫描(除非
--禁用arp-ping or --发送IP 指定)因为 Nmap 需要 MAC 地址才能
进一步扫描目标主机。 在以前的 Nmap 版本中, P- P0。 和 -PN..

-PS 端口 名单 (TCP SYN Ping)。
此选项发送一个带有 SYN 标志设置的空 TCP 数据包。 默认目的地
端口为 80(可在编译时通过更改 DEFAULT_TCP_PROBE_PORT_SPEC。 在
nmap.h).. 可以指定备用端口作为参数。 语法与
等加工。为 -p 除了像 T: 这样的端口类型说明符是不允许的。 例子是
-PS22-PS22-25,80,113,1050,35000. 注意中间不能有空格 -PS
端口列表。 如果指定了多个探测,它们将并行发送。

SYN 标志向远程系统建议您正在尝试建立一个
联系。 通常目的端口会被关闭,一个 RST(重置)包
送回。 如果端口恰好是开放的,目标将采取第二步
TCP 三向握手。 通过使用 SYN/ACK TCP 数据包进行响应。 机器运行
然后 Nmap 通过响应 RST 而不是断开新生连接
发送一个 ACK​​ 数据包,它将完成三向握手并建立一个
全连接。 RST包由运行Nmap的机器内核发送
响应意外的 SYN/ACK,而不是 Nmap 本身。

Nmap 不关心端口是打开还是关闭。 RST 或 SYN/ACK
前面讨论的响应告诉 Nmap 主机可用并且响应。

在 Unix 机器上,只有特权用户 root。 一般能够发送和接收
原始 TCP 数据包。对于非特权用户,会自动采用一种解决方法。
从而 联接 针对每个目标端口发起系统调用。 这有
向目标主机发送 SYN 数据包的效果,试图建立一个
联系。 如果 联接 以快速成功或 ECONNREFUSED 失败返回,
底层 TCP 堆栈必须已收到 SYN/ACK 或 RST 并且主机被标记
可用的。 如果连接尝试一直挂起直到超时,则
主机被标记为关闭。

-铲 端口 名单 (TCP ACK Ping)。
TCP ACK ping 与刚刚讨论的 SYN ping 非常相似。 不同之处,如
您可能会猜到,是设置了 TCP ACK 标志而不是 SYN 标志。 这样的
ACK 数据包声称通过已建立的 TCP 连接确认数据,
但不存在这种联系。 所以远程主机应该总是用 RST 响应
包,在此过程中公开它们的存在。

这个 -铲 选项使用与 SYN 探针 (80) 相同的默认端口,也可以采用
相同格式的目标端口列表。 如果非特权用户尝试此操作,则
联接 使用前面讨论的解决方法。 这种解决方法并不完美,因为
联接 实际上是发送 SYN 数据包而不是 ACK。

提供 SYN 和 ACK ping 探测的原因是为了最大限度地提高
绕过防火墙。 许多管理员配置路由器和其他简单的防火墙
阻止传入的 SYN 数据包,除了那些发往公共服务的数据包,如
公司网站或邮件服务器。 这可以防止其他传入连接到
组织,同时允许用户畅通无阻地向外连接
互联网。 这种无状态方法占用防火墙/路由器上的资源很少,并且
受到硬件和软件过滤器的广泛支持。 Linux Netfilter/iptables。
防火墙软件提供 --同步 实现此无状态的便利选项
方法。 当诸如此类的无状态防火墙规则到位时,SYN ping 探测
(-PS) 发送到关闭的目标端口时可能会被阻止。 在这种情况下,
ACK 探测在它切入这些规则时大放异彩。

另一种常见类型的防火墙使用丢弃意外数据包的状态规则。 这
功能最初主要在高端防火墙上发现,尽管它已经变得很多
多年来更常见。 Linux Netfilter/iptables 系统通过
这些因素包括原料奶的可用性以及达到必要粉末质量水平所需的工艺。 - 状态 选项,它根据连接状态对数据包进行分类。 SYN 探针
更有可能在这样的系统上工作,因为意外的 ACK 数据包通常是
被识别为虚假并丢弃。 解决这个困境的方法是同时发送 SYN 和
通过指定 ACK 探测 -PS-铲.

-PU 端口 名单 (UDP Ping)。
另一个主机发现选项是 UDP ping,它将 UDP 数据包发送到给定的
端口。 对于大多数端口,数据包将为空,但有些使用特定于协议的
更有可能引起响应的有效载荷。 有效载荷数据库描述
at https://nmap.org/book/nmap-payloads.html.. - 数据, --数据字符串
--数据长度 选项​​。

端口列表采用与前面讨论的相同的格式 -PS-铲
选项。 如果没有指定端口,则默认为 40125.. 这个默认可以是
通过更改在编译时配置 DEFAULT_UDP_PROBE_PORT_SPEC. 在 nmap.h.. A
默认情况下使用非常不常见的端口,因为发送到开放端口通常是
不适合这种特定的扫描类型。

在命中目标机器上的关闭端口时,UDP 探测应引发 ICMP
端口不可达数据包作为回报。 这向 Nmap 表明机器已启动并且
可用的。 许多其他类型的 ICMP 错误,例如主机/网络不可达或 TTL
超出表示主机关闭或无法访问。 缺乏回应也是
这样解释。 如果到达一个开放的端口,大多数服务会简单地忽略
空包并且无法返回任何响应。 这就是为什么默认探测端口是
40125,极不可能使用。 一些服务,例如角色
生成器(chargen)协议,会响应一个空的UDP包,从而泄露
到 Nmap 表示机器可用。

这种扫描类型的主要优点是它绕过防火墙和过滤器
只屏蔽TCP。 比如我曾经拥有一台Linksys BEFW11S4无线宽带
路由器。 本设备对外接口默认过滤所有TCP端口,但
UDP 探测仍会引发端口不可达消息,从而泄露设备。

-PY 端口 名单 (SCTP 初始化 Ping)。
此选项发送包含最小 INIT 块的 SCTP 数据包。 默认的
目标端口为 80(可在编译时通过更改
DEFAULT_SCTP_PROBE_PORT_SPEC. 在 nmap.h 中)。 备用端口可以指定为
范围。 语法与 -p 除了端口类型说明符像
S:不允许。 例子是 -PY22-PY22,80,179,5060. 请注意,可以有
之间没有空格 -PY 和端口列表。 如果指定了多个探针,它们将是
并行发送。

INIT 块向远程系统建议您正在尝试建立一个
协会。 通常目标端口将被关闭,并且一个 ABORT 块将被
送回。 如果端口碰巧打开,目标将采取第二步
SCTP 四次握手。 通过使用 INIT-ACK 块进行响应。 如果机器运行
Nmap 有一个功能性的 SCTP 堆栈,然后它通过
响应一个 ABORT 块而不是发送一个 COOKIE-ECHO 块,这将是
四次握手的下一步。 ABORT 包由内核发送
机器运行 Nmap 以响应意外的 INIT-ACK,而不是 Nmap 本身。

Nmap 不关心端口是打开还是关闭。 ABORT 或 INIT-ACK
前面讨论的响应告诉 Nmap 主机可用并且响应。

在 Unix 机器上,只有特权用户 root。 一般能够发送和接收
原始 SCTP 数据包.. 对于非特权用户,目前无法使用 SCTP INIT Pings
用户..

聚乙烯; 聚丙烯; -下午 (ICMP Ping 类型)。
除了讨论的不寻常的 TCP、UDP 和 SCTP 主机发现类型
以前,Nmap 可以发送无处不在的 ping 程序发送的标准数据包。
Nmap 向目标 IP 地址发送 ICMP 类型 8(回声请求)数据包,期望
从可用主机返回的类型 0(回显回复)。不幸的是,网络
资源管理器、许多主机和防火墙现在会阻止这些数据包,而不是像
要求 RFC 1122[2].. 出于这个原因,仅 ICMP 扫描很少足够可靠
针对 Internet 上的未知目标。 但是对于系统管理员监控
内部网络,它们可以是一种实用且有效的方法。 使用 聚乙烯 选项
启用此回显请求行为。

虽然回显请求是标准的 ICMP ping 查询,但 Nmap 并不止于此。 ICMP
标准(RFC 792[3]。 和 RFC 950[4]。 ) 还指定时间戳请求,信息
请求和地址掩码请求数据包分别为代码 13、15 和 17。 尽管
这些查询的表面目的是学习诸如地址掩码之类的信息
和当前时间,它们可以很容易地用于主机发现。 一个回复的系统
已启动并可用。 Nmap目前没有实现信息请求包,因为
它们没有得到广泛支持。 RFC 1122 坚持认为“主机不应该实现
这些消息”。 时间戳和地址掩码查询可以通过 聚丙烯-下午
选项,分别。 时间戳回复(ICMP 代码 14)或地址掩码回复(代码
18) 公开主机可用。 这两个查询在以下情况下可能很有价值
管理员专门阻止回声请求数据包而忘记其他
ICMP 查询可用于相同目的。

-PO 协议 名单 (IP 协议 Ping)。
较新的主机发现选项之一是 IP 协议 ping,它发送 IP
具有在其 IP 标头中设置的指定协议号的数据包。 协议清单
采用与前面讨论的 TCP、UDP 和 SCTP 中的端口列表相同的格式
主机发现选项。 如果没有指定协议,默认是发送多个
用于 ICMP(协议 1)、IGMP(协议 2)和 IP-in-IP(协议 4)的 IP 数据包。 这
可以在编译时通过更改来配置默认协议
DEFAULT_PROTO_PROBE_PORT_SPEC. 在 nmap.h 中。 注意对于ICMP、IGMP、TCP(协议
6), UDP (protocol 17) and SCTP (protocol 132), 数据包以正确的方式发送
协议头。 而其他协议在发送时没有额外的数据
IP 标头(除非 - 数据, --数据字符串--数据长度 选项是
指定的)。

此主机发现方法使用与
探测或 ICMP 协议不可达消息,表示给定的协议
目标主机不支持。 任何一种类型的响应都意味着
目标主机还活着。

-公关 (ARP 平)。
最常见的 Nmap 使用场景之一是扫描以太网 LAN。 在大多数 LAN 上,
特别是那些使用由指定的私有地址范围 RFC 1918[5]、广大
大多数 IP 地址在任何给定时间都未使用。 当 Nmap 尝试发送原始数据时
IP 数据包,例如 ICMP 回显请求,操作系统必须确定
与目标 IP 对应的目标硬件 (ARP) 地址,以便它可以
正确寻址以太网帧。 这通常是缓慢且有问题的,因为
操作系统不是按照他们需要做的期望编写的
在短时间内针对不可用主机的数百万个 ARP 请求。

ARP 扫描让 Nmap 及其优化算法负责 ARP 请求。 如果它
得到响应,Nmap 甚至不需要担心基于 IP 的 ping 数据包
因为它已经知道主机已启动。 这使得 ARP 扫描更快、更多
比基于 IP 的扫描更可靠。 所以在扫描以太网主机时默认完成
Nmap 检测到的是在本地以太网网络上。 即使不同的 ping 类型(例如
as 聚乙烯 or -PS) 被指定,Nmap 使用 ARP 代替任何目标
在同一个局域网上。 如果您绝对不想进行 ARP 扫描,请指定
--禁用arp-ping.

对于 IPv6(-6 选项), -公关 使用 ICMPv6 邻居发现而不是 ARP。 邻居
RFC 4861 中定义的发现可以看作是 ARP 的 IPv6 等价物。

--禁用arp-ping (无 ARP 或 ND Ping)。
Nmap 通常执行本地连接的 ARP 或 IPv6 邻居发现 (ND) 发现
以太网主机,即使其他主机发现选项,例如 P or 聚乙烯 被使用。 到
禁用此隐式行为,使用 --禁用arp-ping 选项。

默认行为通常更快,但此选项在使用的网络上很有用
代理 ARP,其中路由器推测性地回复所有 ARP 请求,使每个
根据 ARP 扫描,目标似乎已启动。

--跟踪路由 (跟踪到主机的路径)。
使用来自扫描结果的信息在扫描后执行跟踪路由
确定最有可能到达目标的端口和协议。 它适用于所有
除连接扫描外的扫描类型 (-sT) 和空闲扫描 (-sI)。 所有的痕迹都使用 Nmap 的
动态时序模型并并行执行。

Traceroute 的工作原理是发送具有低 TTL(生存时间)的数据包以尝试
从扫描器和扫描器之间的中间跃点引出 ICMP Time Exceeded 消息
目标主机。 标准 traceroute 实现以 1 的 TTL 开始并递增
TTL 直到到达目标主机。 Nmap 的 traceroute 以高开头
TTL,然后递减 TTL,直到它达到零。 向后做可以让 Nmap
使用巧妙的缓存算法来加速对多个主机的跟踪。 一般
Nmap 每台主机发送的数据包少 5-10 个,具体取决于网络状况。 如果单
正在扫描子网(即192.168.0.0/24)Nmap可能只需要发送两个数据包
对于大多数主机。

-n (无 DNS 解析)。
告诉 Nmap 决不要 对它找到的活动 IP 地址进行反向 DNS 解析。
由于即使使用 Nmap 的内置并行存根解析器,DNS 也可能很慢,因此此选项
可以减少扫描次数。

-R (所有目标的 DNS 解析)。
告诉 Nmap 时刻 对目标 IP 地址进行反向 DNS 解析。 一般
反向 DNS 仅针对响应式(在线)主机执行。

--系统-dns (使用系统 DNS 解析器)。
默认情况下,Nmap 通过直接向名称服务器发送查询来解析 IP 地址
在您的主机上配置,然后侦听响应。 许多请求(通常是几十个)
并行执行以提高性能。 指定此选项以使用您的
系统解析器(一次一个 IP 通过 获取名称信息 称呼)。 这个比较慢
除非您在 Nmap 并行解析器中发现错误,否则很少有用(请让我们
知道你是否这样做)。 系统解析器始终用于 IPv6 扫描。

--dns-服务器 服务器1[,服务器2[,...]](用于反向 DNS 查询的服务器)。
默认情况下,Nmap 从你的 DNS 服务器中确定你的 DNS 服务器(用于 rDNS 解析)
resolv.conf 文件 (Unix) 或注册表 (Win32)。 或者,你可以使用这个
选项指定备用服务器。 如果您使用,则不支持此选项
--系统-dns 或 IPv6 扫描。 使用多个 DNS 服务器通常会更快,尤其是
如果您为目标 IP 空间选择权威服务器。 这个选项也可以
提高隐身性,因为您的请求几乎可以被任何递归 DNS 退回
Internet 上的服务器。

此选项在扫描专用网络时也很有用。 有时只有几个
名称服务器提供正确的 rDNS 信息,您甚至可能不知道它们在哪里
是。 可以扫描网络53端口(也许有版本检测),然后试试
Nmap 列表扫描 (-sL) 一次指定每个名称服务器 --dns-服务器
直到你找到一个有效的。

PORT 扫描 基本


虽然多年来 Nmap 的功能不断发展,但它最初是作为一个高效的端口
扫描仪,这仍然是它的核心功能。 简单的命令 NMAP 目标 扫描 1,000
主机上的 TCP 端口 目标. 虽然许多端口扫描器传统上将所有端口都集中在一起
进入打开或关闭状态,Nmap 更加细化。 它将端口分为六个
状态:打开、关闭、过滤、未过滤、打开|过滤或关闭|过滤。

这些状态不是端口本身的内在属性,而是描述了 Nmap 如何看待
他们。 例如,来自与目标相同的网络的 Nmap 扫描可能会显示端口 135/tcp
打开,同时使用 Internet 上的相同选项进行扫描
可能会显示该端口已过滤。

这个 端口 国家 确认 by NMAP

应用程序正在主动接受 TCP 连接、UDP 数据报或 SCTP
此端口上的关联。 找到这些通常是端口扫描的主要目标。
具有安全意识的人知道每个开放端口都是攻击的途径。 攻击者和
渗透测试者想利用开放端口,而管理员试图关闭或
使用防火墙保护他们,而不会阻止合法用户。 开放端口也是
非安全扫描很有趣,因为它们显示了可用于
网络。

一个关闭的端口是可以访问的(它接收并响应 Nmap 探测包),但是
没有应用程序在监听它。 他们可以帮助表明主机是
IP 地址(主机发现或 ping 扫描),并作为操作系统检测的一部分。
因为关闭的端口是可访问的,所以如果有一些开放的端口,稍后可能值得扫描
向上。 管理员可能需要考虑使用防火墙阻止此类端口。 然后他们
将出现在过滤状态,接下来讨论。

Nmap 无法确定端口是否打开,因为包过滤阻止了它
探测到达端口。 过滤可能来自专用防火墙
设备、路由器规则或基于主机的防火墙软件。 这些端口挫败了攻击者
因为他们提供的信息太少了。 有时他们响应 ICMP 错误
消息,例如类型 3 代码 13(目标不可达:通信
行政上禁止),但过滤器只会丢弃探测而不响应
更为常见。 这会强制 Nmap 重试几次以防万一
由于网络拥塞而不是过滤而被丢弃。 这会减慢扫描速度
大幅提升。

未过滤状态表示端口可以访问,但Nmap无法确定
无论是开放的还是封闭的。 只有ACK扫描,用于映射防火墙
规则集,将端口分类为这种状态。 使用其他扫描扫描未过滤的端口
诸如窗口扫描、SYN 扫描或 FIN 扫描之类的类型可能有助于解决端口是否为
打开。

当无法确定端口是否打开时,Nmap 会将端口置于此状态
或过滤。 对于开放端口没有响应的扫描类型,会发生这种情况。 缺少
响应也可能意味着数据包过滤器丢弃了探测或它的任何响应
引出。 因此 Nmap 无法确定端口是打开还是被过滤。
UDP、IP 协议、FIN、NULL 和 Xmas 扫描以这种方式对端口进行分类。

当 Nmap 无法确定端口是否关闭或
过滤。 它仅用于 IP ID 空闲扫描。

PORT 扫描 技巧


作为一名从事汽车维修的新手,我可能要花几个小时才能适应我的
手头任务的基本工具(锤子、胶带、扳手等)。 当我失败
悲惨地把我的老爷车拖给一个真正的机械师,他总是拿着一个巨大的工具四处钓鱼
直到拉出完美的 Gizmo,这使工作看起来毫不费力。 的艺术
端口扫描类似。 专家了解数十种扫描技术并选择
适合给定任务的一个(或组合)。 没有经验的用户和脚本
小朋友,。 另一方面,尝试使用默认的 SYN 扫描解决所有问题。 自从
Nmap 是免费的,掌握端口扫描的唯一障碍是知识。 那肯定比
汽车世界,在那里可能需要很高的技巧才能确定您需要支柱
弹簧压缩机,那你还是得花几千块钱买它。

大多数扫描类型仅对特权用户可用。这是因为他们发送
并接收原始数据包,。 这需要 Unix 系统上的 root 访问权限。 使用
建议使用 Windows 上的管理员帐户,尽管 Nmap 有时适用于
当 WinPcap 已加载到操作系统中时,该平台上的非特权用户。
当 Nmap 于 1997 年发布时,需要 root 权限是一个严重的限制,因为许多
用户只能访问共享的 shell 帐户。 现在,世界不同了。 电脑是
更便宜,更多的人拥有永远在线的直接互联网访问,以及桌面 Unix 系统
(包括 Linux 和 Mac OS X)很普遍。 现在可以使用 Windows 版本的 Nmap,
允许它在更多桌面上运行。 由于所有这些原因,用户不需要
从有限的共享 shell 帐户运行 Nmap。 这是幸运的,因为特权选项
使 Nmap 更加强大和灵活。

虽然 Nmap 试图产生准确的结果,但请记住,它的所有见解都是
基于目标机器(或它们前面的防火墙)返回的数据包。 这样的
主机可能不可信并发送旨在混淆或误导 Nmap 的响应。 很多
更常见的是不符合 RFC 标准的主机,它们对 Nmap 探测没有响应。
FIN、NULL 和 Xmas 扫描特别容易受到此问题的影响。 这样的问题是
特定于某些扫描类型,因此在各个扫描类型条目中进行了讨论。

本节记录了 Nmap 支持的十几种端口扫描技术。 只有一个
方法可以一次使用,除了UDP扫描(s) 和任何一个 SCTP 扫描
类型(-sy, -sZ) 可以与任何一种 TCP 扫描类型结合使用。 作为记忆辅助工具,端口
扫描类型选项的形式 -sC,在 Moku:Pro 上 C 是扫描名称中的突出字符,
通常是第一个。 对此的一个例外是已弃用的 FTP 退回扫描 (-b)。 经过
默认情况下,Nmap 执行 SYN 扫描,但如果用户这样做,它会替代连接扫描
没有发送原始数据包的适当权限(在 Unix 上需要 root 访问权限)。 的
本节列出的扫描,非特权用户只能执行连接和FTP反弹
扫描。

-sS (TCP SYN 扫描)。
SYN 扫描是默认和最受欢迎的扫描选项,这是有充分理由的。 有可能
执行速度快,在快速网络上每秒扫描数千个端口而不是
受到限制性防火墙的阻碍。 它也相对不显眼和隐蔽
因为它永远不会完成 TCP 连接。 SYN 扫描适用于任何兼容的 TCP
堆栈而不是像 Nmap 那样依赖特定平台的特性
FIN/NULL/Xmas、Maimon 和空闲扫描都可以。 它还允许清晰、可靠
打开、关闭和过滤状态之间的区别。

这种技术通常称为半开扫描,因为您不会打开
完整的 TCP 连接。 你发送一个 SYN 数据包,就好像你要打开一个真正的
连接,然后等待响应。 SYN/ACK 表示端口正在侦听
(打开),而 RST(重置)表示非侦听器。 如果没有回应是
在多次重传后收到,该端口被标记为已过滤。 港口是
如果 ICMP 无法访问错误(类型 3,代码 0、1、2、3、9、10 或
13) 收到。 如果 SYN 数据包(没有 ACK
标志)作为响应接收。 这可能是由于已知的极其罕见的 TCP 功能
作为同时打开或拆分的握手连接(请参阅
https://nmap.org/misc/split-handshake.pdf).

-sT (TCP 连接扫描)。
当 SYN 扫描不是一个选项时,TCP 连接扫描是默认的 TCP 扫描类型。 这是
用户没有原始数据包权限的情况。 而不是写生
与大多数其他扫描类型一样,Nmap 要求底层操作系统
通过发出与目标机器和端口的连接 联接 系统
称呼。 这与 Web 浏览器、P2P 客户端和大多数
其他启用网络的应用程序用于建立连接。 它是一个
称为 Berkeley Sockets API 的编程接口。 而不是读取原始数据包
离线响应,Nmap 使用这个 API 来获取每个的状态信息
连接尝试。

当 SYN 扫描可用时,它通常是更好的选择。 Nmap 对
高水平 联接 与原始数据包相比,调用效率较低。 这
系统调用完成连接以打开目标端口而不是执行
SYN 扫描所做的半开重置。 这不仅需要更长的时间,而且需要更多
数据包获取相同的信息,但目标机器更有可能记录
联系。 一个像样的 IDS 会捕捉到任何一个,但大多数机器没有这样的警报
系统。 普通 Unix 系统上的许多服务都会在 syslog 中添加注释,并且
有时会出现一个神秘的错误消息,当 Nmap 连接然后关闭连接时
无需发送数据。 发生这种情况时,真正可悲的服务会崩溃,尽管那是
罕见。 在她的日志中看到一堆连接尝试的管理员来自
单系统应该知道她已经连接扫描了。

s (UDP 扫描)。
虽然 Internet 上最流行的服务运行在 TCP 协议上, UDP[6] 服务
被广泛部署。 DNS、SNMP 和 DHCP(注册端口 53、161/162 和 67/68)是
最常见的三种。 因为UDP扫描一般比较慢,比较难
与 TCP 相比,一些安全审核员会忽略这些端口。 这是一个错误,因为可利用
UDP 服务非常普遍,攻击者当然不会忽略整个协议。
幸运的是,Nmap 可以帮助清点 UDP 端口。

UDP 扫描被激活 s 选项。 它可以与 TCP 扫描类型结合使用
比如SYN扫描(-sS) 在同一次运行中检查两个协议。

UDP 扫描的工作原理是向每个目标端口发送一个 UDP 数据包。 对于一些常见的端口
例如 53 和 161,发送特定于协议的有效负载以提高响应率,但
对于大多数端口,数据包是空的,除非 - 数据, --数据字符串--数据长度
选项被指定。 如果返回 ICMP 端口不可达错误(类型 3,代码 3),
端口已关闭。 其他 ICMP 不可达错误(类型 3,代码 0、1、2、9、10 或
13) 将端口标记为已过滤。 有时,服务会响应一个 UDP 数据包,
证明它是开放的。 如果重传后没有收到响应,则端口为
分类为开放|过滤。 这意味着端口可能是开放的,或者可能是数据包
过滤器正在阻止通信。 版本检测(-sV) 可以用来帮助
区分真正开放的端口和过滤的端口。

UDP 扫描的一大挑战是快速完成。 很少打开和过滤端口
发送任何响应,让 Nmap 超时,然后在刚好进行重传
如果探测或响应丢失。 封闭的端口通常是一个更大的问题。
他们通常会发回 ICMP 端口不可达错误。 但与发送的 RST 数据包不同
通过关闭 TCP 端口以响应 SYN 或连接扫描,许多主机限制了速率。 ICMP
默认情况下端口不可达消息。 Linux 和 Solaris 对
这。 例如,Linux 2.4.20 内核将目标不可达消息限制为
每秒一个(在 net/ipv4/icmp.c 中)。

Nmap 检测速率限制并相应减慢以避免网络泛滥
目标机器将丢弃的无用数据包。 不幸的是,Linux 风格的
每秒一个数据包的限制使得 65,536 端口扫描需要超过 18 小时。 想法
加速你的 UDP 扫描包括并行扫描更多的主机,做一个快速的
首先只扫描流行的端口,从防火墙后面扫描,然后使用
--主机超时 跳过慢主机。

-sy (SCTP 初始化扫描)。
SCTP[7] 是 TCP 和 UDP 协议的一个相对较新的替代方案,结合了大多数
TCP 和 UDP 的特性,并增加了新的特性,如多归属和
多流。 它主要用于 SS7/SIGTRAN 相关服务,但具有
也有可能用于其他应用程序。 SCTP INIT 扫描是 SCTP
相当于 TCP SYN 扫描。 可以快速执行,扫描数千个端口
每秒在不受限制性防火墙阻碍的快速网络上。 像SYN扫描一样,
INIT 扫描相对不显眼和隐蔽,因为它永远不会完成 SCTP
协会。 它还允许在打开、关闭、
和过滤状态。

这种技术通常称为半开扫描,因为您不会打开
完整的 SCTP 关联。 你发送一个 INIT 块,就好像你要打开一个真正的
关联,然后等待响应。 INIT-ACK 块指示端口是
侦听(打开),而 ABORT 块表示非侦听器。 如果没有回应
在多次重传后收到,端口被标记为已过滤。 港口是
如果 ICMP 无法访问错误(类型 3,代码 0、1、2、3、9、10 或
13) 收到。

-SN; -SF; -sX (TCP NULL、FIN 和 Xmas 扫描)。
这三种扫描类型(使用 --扫描标志 选项描述
在下一节)利用一个微妙的漏洞 TCP RFC[8] 区分
打开和关闭端口之间。 RFC 65 的第 793 页说“如果 [destination] 端口
state is CLOSED .... 不包含 RST 的传入段导致发送 RST
作为回应。” 然后下一页讨论发送到开放端口的数据包,而没有
SYN、RST 或 ACK 位设置,说明:“你不太可能到达这里,但如果你这样做,
放下片段,然后返回。”

扫描符合此 RFC 文本的系统时,任何不包含 SYN 的数据包,
如果端口关闭且没有响应,RST 或 ACK 位将导致返回 RST
如果端口是开放的。 只要不包括这三个位,任何
其他三个(FIN、PSH 和 URG)的组合是可以的。 Nmap 利用这一点
三种扫描类型:

空扫描 (-SN)
不设置任何位(TCP 标志标头为 0)

FIN扫描(-SF)
仅设置 TCP FIN 位。

圣诞扫描 (-sX)
设置 FIN、PSH 和 URG 标志,像圣诞树一样点亮数据包。

除了设置的 TCP 标志外,这三种扫描类型在行为上完全相同
在探测包中。 如果收到 RST 数据包,则认为该端口已关闭,而没有
响应意味着它被打开|过滤。 如果 ICMP 不可达,则端口被标记为已过滤
收到错误(类型 3,代码 0、1、2、3、9、10 或 13)。

这些扫描类型的主要优点是它们可以潜入某些
无状态防火墙和数据包过滤路由器。 另一个优点是这些
扫描类型甚至比 SYN 扫描更隐蔽。 不要指望这个
尽管如此——大多数现代 IDS 产品都可以配置为检测它们。 最大的缺点是
并非所有系统都严格遵守 RFC 793。 多个系统发送 RST
无论端口是否打开,都会响应探测。 这导致所有
被标记为关闭的端口。 执行此操作的主要操作系统是 Microsoft
Windows、许多 Cisco 设备、BSDI 和 IBM OS/400。 此扫描确实适用于大多数
虽然是基于 Unix 的系统。 这些扫描的另一个缺点是它们不能
将开放端口与某些过滤的端口区分开来,让您得到响应
打开|过滤。

-sA (TCP ACK 扫描)。
此扫描与目前讨论的其他扫描不同,因为它从未确定
打开(甚至打开|过滤)端口。 它用于映射防火墙规则集,
确定它们是否有状态以及过滤了哪些端口。

ACK 扫描探测包只设置了 ACK 标志(除非你使用 --扫描标志)。 什么时候
扫描未过滤的系统,打开和关闭的端口都将返回 RST 数据包。 地图
然后将它们标记为未过滤,这意味着它们可以通过 ACK 数据包到达,但是
它们是打开的还是关闭的尚未确定。 不响应或发送的端口
某些返回的 ICMP 错误消息(类型 3,代码 0、1、2、3、9、10 或 13)被标记
过滤。

-SW (TCP 窗口扫描)。
窗口扫描与 ACK 扫描完全相同,只是它利用了一个实现
某些系统的详细信息,以区分开放端口和关闭端口,而不是
返回 RST 时,始终未过滤地打印。 它通过检查 TCP
返回的 RST 数据包的窗口字段。 在某些系统上,开放端口使用正
窗口大小(即使对于 RST 数据包),而关闭的窗口大小为零。 所以代替
当收到 RST 返回时,总是将端口列为未过滤端口,窗口扫描列出了
如果该重置中的 TCP 窗口值为正或为零,则端口为打开或关闭,


此扫描依赖于少数系统的实现细节
互联网,所以你不能总是相信它。 不支持它的系统通常会
返回所有端口关闭。 当然也有可能机器真的没开
端口。 如果大多数扫描的端口都关闭了,但有几个常见的端口号(例如 22、25、
53) 被过滤,系统最有可能受到影响。 有时,系统会
甚至表现出完全相反的行为。 如果您的扫描显示 1,000 个开放端口和三个
关闭或过滤的端口,那么这三个很可能是真正开放的。

-SM (TCP Maimon 扫描)。
Maimon 扫描以其发现者 Uriel Maimon 的名字命名。他描述了
Phrack 杂志第 49 期(1996 年 XNUMX 月)中的技术.. Nmap,包括这个
技术,在两期后发布。 这个技巧和NULL完全一样,
FIN 和 Xmas 扫描,除了探测是 FIN/ACK。 根据 RFC 793[8](TCP),
应该生成一个 RST 数据包来响应这样的探测端口是否打开
或关闭。 然而,Uriel 注意到许多 BSD 派生系统只是简单地丢弃数据包
如果端口是开放的。

--扫描标志 (自定义 TCP 扫描)。
真正高级的 Nmap 用户不必将自己限制在提供的预设扫描类型上。
这个 --扫描标志 选项允许您通过指定任意 TCP 来设计自己的扫描
标志.. 让您的创意源源不断,同时避开入侵检测系统。
其供应商只需翻阅 Nmap 手册页添加特定规则!

这个 --扫描标志 参数可以是数字标志值,例如 9(PSH 和 FIN),但
使用符号名称更容易。 只需将 URG、ACK、PSH 的任意组合混合在一起,
RST、SYN 和 FIN。 例如, --扫描标志 URGACKPSHRTSYNFIN 设置一切,虽然
它对扫描不是很有用。 这些指定的顺序无关紧要。

除了指定所需的标志外,您还可以指定 TCP 扫描类型(例如
-sA or -SF)。 该基本类型告诉 Nmap 如何解释响应。 例如,一个 SYN
扫描认为无响应表示过滤端口,而 FIN 扫描处理
与打开|过滤相同。 Nmap 的行为方式与基本扫描类型相同,
除了它将使用您指定的 TCP 标志。 如果不指定基数
类型,使用 SYN 扫描。

-sZ (SCTP COOKIE ECHO 扫描)。
SCTP COOKIE ECHO 扫描是一种更高级的 SCTP 扫描。 它利用了这个事实
SCTP 实现应该默默地丢弃包含 COOKIE ECHO 块的数据包
在开放端口上,但如果端口关闭则发送 ABORT。 本次扫描的优势
类型是端口扫描不如 INIT 扫描那么明显。 此外,可能还有
无状态防火墙规则集阻止 INIT 块,但不阻止 COOKIE ECHO 块。 别
误以为这会使端口扫描不可见; 一个好的 IDS 将是
也能够检测 SCTP COOKIE ECHO 扫描。 缺点是 SCTP COOKIE ECHO 扫描
无法区分开放端口和过滤端口,让您处于状态
在这两种情况下都打开|过滤。

-sI 僵尸 主持人[:探针端口](空闲扫描)。
这种先进的扫描方法允许对目标进行真正的盲 TCP 端口扫描
(意味着没有数据包从您的真实 IP 地址发送到目标)。 相反,一个
独特的旁道攻击利用可预测的 IP 分片 ID 序列
僵尸主机上的生成以收集有关目标上开放端口的信息。
IDS 系统会将扫描显示为来自您指定的僵尸机器(其中
必须达到并满足某些标准)。 这种迷人的扫描类型太复杂了
在本参考指南中进行了完整描述,因此我撰写并发布了一篇非正式论文,其中包括
有关详细信息,请访问 https://nmap.org/book/idlescan.html.

除了非常隐蔽(由于其盲目性),这种扫描类型
允许映射机器之间基于 IP 的信任关系。 港口清单
显示开放端口 这些因素包括原料奶的可用性以及达到必要粉末质量水平所需的工艺。 透视 of 这些因素包括原料奶的可用性以及达到必要粉末质量水平所需的工艺。 僵尸 主办。 所以你可以尝试扫描一个
使用您认为可能受信任的各种僵尸攻击目标。 (通过路由器/数据包
过滤规则)。

如果你想探测,你可以在僵尸主机上添加一个冒号,后跟一个端口号
僵尸上的特定端口用于 IP ID 更改。 否则 Nmap 将使用它的端口
默认情况下用于 TCP ping (80)。

-所以 (IP协议扫描)。
IP 协议扫描允许您确定哪些 IP 协议(​​TCP、ICMP、IGMP 等)
目标机器支持。 这在技术上不是端口扫描,因为它会循环
通过 IP 协议号而不是 TCP 或 UDP 端口号。 但它仍然使用
-p 选择扫描的协议编号的选项,在正常范围内报告其结果
端口表格式,甚至使用与真正端口相同的底层扫描引擎
扫描方法。 所以它足够接近它属于这里的端口扫描。

除了本身很有用之外,协议扫描还展示了
开源软件。 虽然基本思想很简单,但我没想到
添加它也没有收到任何此类功能的请求。 然后在夏天
2000 年,格哈德·里格。 构思了这个想法,写了一个很好的补丁来实现它,
并将其发送到公告邮件列表。 (然后称为nmap-hackers)..我
将该补丁合并到 Nmap 树中,并在第二天发布了一个新版本。
很少有商业软件能让用户有足够的热情来设计和
贡献自己的进步!

协议扫描的工作方式与 UDP 扫描类似。 而不是遍历
UDP 数据包的端口号字段,它发送 IP 数据包头并遍历
八位 IP 协议字段。 标题通常是空的,不包含数据,也不包含
甚至是声明协议的正确标头。 例外是 TCP、UDP、ICMP、
SCTP 和 IGMP。 由于某些系统
不会以其他方式发送它们,因为 Nmap 已经具有创建它们的功能。
协议扫描不是监视 ICMP 端口不可达消息,而是在
寻找ICMP 协议 无法访问的消息。 如果 Nmap 收到任何响应
来自目标主机的协议,Nmap 将该协议标记为开放。 ICMP 协议
无法访问的错误(类型 3,代码 2)导致协议被标记为关闭,而
端口不可达(类型 3,代码 3)标志着协议开放。 其他 ICMP 不可达
错误(类型 3,代码 0、1、9、10 或 13)导致协议被标记为已过滤
(虽然他们证明ICMP同时是开放的)。 如果没有收到回复
重传后,协议被标记为open|filtered

-b 则fTP 中继 主持人 (FTP 退回扫描)。
FTP 协议的一个有趣特性 (RFC 959[9]) 支持所谓的代理
FTP 连接。 这允许用户连接到一个 FTP 服务器,然后询问该文件
发送到第三方服务器。 这样的功能在许多层面上已经成熟,因此
大多数服务器已经停止支持它。 此功能允许的滥用之一是
导致FTP服务器对其他主机进行端口扫描。 只需要求 FTP 服务器发送一个
文件依次发送到目标主机的每个感兴趣的端口。 错误信息将
描述端口是否打开。 这是绕过防火墙的好方法
因为组织 FTP 服务器通常放置在他们更容易访问的地方
其他内部主机,而不是任何旧的 Internet 主机。 Nmap 支持 FTP 弹跳扫描
-b 选项。 它需要一个形式的参数 用户名:密码@服务器:端口.
服务器 是易受攻击的 FTP 服务器的名称或 IP 地址。 与普通 URL 一样,您
可以省略 用户名:密码, 在这种情况下匿名登录凭据(用户:匿名
密码:-wwwuser@) 被使用。 端口号(和前面的冒号)可以省略为
那么,在这种情况下,默认的 FTP 端口 (21) 服务器 用来。

这个漏洞在 1997 年 Nmap 发布时很普遍,但在很大程度上
固定的。 易受攻击的服务器仍然存在,因此当所有其他方法都失败时值得一试。
如果绕过防火墙是您的目标,请扫描目标网络的端口 21(甚至
任何 FTP 服务(如果您使用版本检测扫描所有端口)并使用 ftp-bounce。
NSE 脚本。 Nmap 会告诉你主机是否易受攻击。 如果你只是
试图掩盖你的踪迹,你不需要(事实上,不应该)限制
自己到目标网络上的主机。 在你去扫描随机互联网之前
易受攻击的 FTP 服务器的地址,请考虑系统管理员可能不喜欢您
以这种方式滥用他们的服务器。

PORT 规格 AND SCAN 订单


除了前面讨论的所有扫描方法之外,Nmap 还提供了以下选项:
指定扫描哪些端口以及扫描顺序是随机的还是顺序的。
默认情况下,Nmap 为每个协议扫描最常见的 1,000 个端口。

-p 端口 范围 (只扫描指定端口)。
此选项指定要扫描的端口并覆盖默认值。
各个端口号都可以,范围也可以用连字符分隔(例如 1-1023)。
范围的开始和/或结束值可能会被省略,导致 Nmap 使用 1 和
分别为 65535。 所以你可以指定 -p- 扫描从 1 到 65535 的端口。
扫描端口为零。 如果您明确指定,则允许。 用于IP协议扫描
(-所以),此选项指定您希望扫描的协议编号 (0–255)。

扫描协议组合(例如 TCP 和 UDP)时,您可以指定一个
通过在端口号前面加上 T:对于 TCP,U:对于 UDP,S:对于特定协议
SCTP 或 P:用于 IP 协议。 限定符一直持续到您指定另一个限定符为止。
例如,论证 -p 电话:53,111,137,电话:21-25,80,139,8080 将扫描 UDP 端口 53,
111 和 137,以及列出的 TCP 端口。 请注意,要同时扫描 UDP 和 TCP,您
必须指定 s 和至少一种 TCP 扫描类型(例如 -sS, -SF-sT)。 如果不
给定协议限定符,端口号被添加到所有协议列表中。 端口
也可以根据端口在
nmap 服务。 您甚至可以使用通配符 * 和 ? 与名字。 例如,到
扫描 FTP 和名称以“http”开头的所有端口,使用 -p FTP,http*。当心
关于 shell 扩展并将参数引用到 -p 如果不确定。

端口范围可以用方括号括起来以指示其中的端口
出现在 nmap-services 中的范围。 例如,以下将扫描所有端口
nmap-services 等于或低于 1024: -p [-1024]. 小心 shell 扩展和
引用论点 -p 如果不确定。

--排除端口 端口 范围 (从扫描中排除指定的端口)。
此选项指定您希望 Nmap 从扫描中排除哪些端口。 这 端口
范围 指定类似于 -p. 对于 IP 协议扫描 (-所以),这个选项
指定要排除的协议编号 (0–255)。

当要求排除端口时,它们会被排除在所有类型的扫描之外(即
在任何情况下都不会扫描它们)。 这也包括发现
相。

-F (快速(有限端口)扫描)。
指定您希望扫描的端口数少于默认端口数。 通常 Nmap 扫描
每个扫描协议最常见的 1,000 个端口。 和 -F,这减少到 100。

Nmap 需要一个带有频率信息的 nmap-services 文件才能知道哪个
端口是最常见的。 如果端口频率信息不可用,也许
由于使用了自定义的 nmap-services 文件,Nmap 会扫描所有命名的端口以及
端口 1-1024。 在这种情况下, -F 表示仅扫描服务中指定的端口
文件中。

-r (不要随机化端口)。
默认情况下,Nmap 会随机化扫描的端口顺序(除了某些常见的
出于效率原因,可访问的端口在开头附近移动)。 这
随机化通常是可取的,但您可以指定 -r 对于顺序(排序
从最低到最高)端口扫描代替。

--端口比率 <十进制 之间 0 1>
以大于给定的比率扫描 nmap-services 文件中的所有端口。
必须在 0.0 到 1.1 之间。

--顶级端口 n
扫描 n 排除所有端口后,在 nmap-services 文件中找到的最高比率端口
--排除端口. n 必须是 1 或更大。

SERVICE AND VERSION 检测


将 Nmap 指向远程机器,它可能会告诉您端口 25/tcp、80/tcp 和 53/udp
是开放的。 使用它的 nmap-services。 大约 2,200 个知名服务的数据库。 地图
会报告这些端口可能对应于邮件服务器 (SMTP)、Web 服务器
(HTTP) 和名称服务器 (DNS)。 这种查找通常是准确的——巨大的
大多数侦听 TCP 端口 25 的守护进程实际上是邮件服务器。 然而,你
不应该把你的安全押在这个上! 人们可以并且确实在奇怪的端口上运行服务。

即使 Nmap 是对的,并且上面假设的服务器正在运行 SMTP、HTTP 和 DNS
服务器,这不是很多信息。 在进行漏洞评估(甚至
简单的网络清单)您的公司或客户,您真的想知道哪些
邮件和 DNS 服务器和版本正在运行。 拥有准确的版本号会有所帮助
显着地确定服务器容易受到哪些攻击。 版本检测
帮助您获取这些信息。

使用其他扫描方法之一发现 TCP 和/或 UDP 端口后,版本
检测询问这些端口以确定更多关于实际运行的内容。 这
nmap-服务-探针。 数据库包含用于查询各种服务和匹配的探针
表达式来识别和解析响应。 Nmap 尝试确定服务协议
(例如 FTP、SSH、Telnet、HTTP)、应用程序名称(例如 ISC BIND、Apache httpd、Solaris
telnetd)、版本号、主机名、设备类型(例如打印机、路由器)、操作系统系列
(例如 Windows、Linux)。 在可能的情况下,Nmap 还会获取通用平台枚举
(CPE)。 该信息的表示。 有时杂项细节,例如是否
X 服务器对连接开放,SSH 协议版本或 KaZaA 用户名是
可用的。 当然,大多数服务并不提供所有这些信息。 如果 Nmap 是
编译支持 OpenSSL,会连接到 SSL 服务器来推断服务
在该加密层后面侦听.. 一些 UDP 端口留在开放|过滤
UDP 端口扫描后的状态无法确定端口是打开还是过滤。
版本检测将尝试从这些端口引出响应(就像它在
打开端口),并在成功时将状态更改为打开。 打开|过滤的 TCP 端口是
以同样的方式对待。 注意 Nmap -A 选项启用版本检测等
事物。 记录版本检测的工作、使用和定制的论文
可在 https://nmap.org/book/vscan.html.

当发现 RPC 服务时,Nmap RPC 研磨器。 自动用于
确定 RPC 程序和版本号。 它将检测到的所有 TCP/UDP 端口视为
RPC 并用 SunRPC 程序 NULL 命令淹没它们,以试图确定是否
它们是 RPC 端口,如果是,它们提供什么程序和版本号。 这样你就可以
有效地获得相同的信息 rpc信息 -p 即使目标的端口映射器位于
防火墙(或受 TCP 包装器保护)。 诱饵目前不适用于 RPC 扫描。

当 Nmap 收到来自服务的响应但无法将它们匹配到它的数据库时,它
打印出一个特殊的指纹和一个 URL 供你提交如果你确定的话
端口上正在运行什么。 请花几分钟时间提交,以便
您的发现可以使每个人受益。 由于这些提交,Nmap 大约有 6,500 个模式
匹配 SMTP、FTP、HTTP 等 650 多种协议。

使用以下选项启用和控制版本检测:

-sV (版本检测)。
启用版本检测,如上所述。 或者,您可以使用 -A,这
启用版本检测等。

-SR. 是别名 -sV. 2011年XNUMX月之前,用于激活RPC研磨机
与版本检测分开,但现在这些选项总是组合在一起。

--所有端口 (不要从版本检测中排除任何端口)。
默认情况下,Nmap 版本检测会跳过 TCP 端口 9100,因为有些打印机只是
打印发送到该端口的任何内容,导致数十页的 HTTP GET 请求,
二进制 SSL 会话请求等。可以通过修改或更改此行为
删除 nmap-service-probes 中的 Exclude 指令,或者您可以指定 --所有端口
无论是否有任何排除指令,都可以扫描所有端口。

--版本强度 强度 (设置版本扫描强度)。
执行版本扫描时 (-sV),Nmap发送一系列的probe,每个probe是
分配了 XNUMX 到 XNUMX 之间的稀有度值。 编号较低的探针是有效的
反对各种各样的公共服务,而编号较高的服务很少
有用。 强度级别指定应应用哪些探针。 越高
数字,服务被正确识别的可能性就越大。 然而,高
强度扫描需要更长的时间。 强度必须在 0 到 9 之间。默认是
7.. 当探针通过 nmap-service-probesports 注册到目标端口时
指令,无论强度水平如何,都会尝试该探针。 这确保了
DNS 探测将始终针对任何开放端口 53 进行尝试,SSL 探测将
针对 443 等完成

--版本轻 (启用灯光模式)。
这是一个方便的别名 --版本强度 2. 这种灯光模式使版本
扫描速度更快,但识别服务的可能性略低。

--版本-全部 (尝试每一个探头)。
别名为 --版本强度 9, 确保每一次探测都被尝试
针对每个端口。

--版本跟踪 (跟踪版本扫描活动)。
这会导致 Nmap 打印出关于版本扫描是什么的大量调试信息
正在做。 这是你得到的一个子集 --数据包跟踪.

OS 检测


Nmap 最著名的功能之一是使用 TCP/IP 堆栈进行远程操作系统检测
指纹。 Nmap 向远程主机发送一系列 TCP 和 UDP 数据包并检查
几乎所有的回复。 在进行了 TCP ISN 等数十次测试后
采样、TCP 选项支持和排序、IP ID 采样和初始窗口大小
检查,Nmap 将结果与其 nmap-os-db 进行比较。 超过 2,600 个已知操作系统的数据库
指纹并在匹配时打印出操作系统详细信息。 每个指纹包括
操作系统的自由格式文本描述,以及提供供应商的分类
名称(例如 Sun)、底层操作系统(例如 Solaris)、操作系统代(例如 10)和设备类型
(通用、路由器、交换机、游戏机等)。 大多数指纹也有一个共同的
平台枚举 (CPE)。 表示,如 cpe:/o:linux:linux_kernel:2.6。

如果 Nmap 无法猜测机器的操作系统,并且条件良好(例如至少有一个
找到一个开放端口和一个关闭端口),Nmap 会提供一个 URL,你可以用来提交
如果您(确定)知道机器上运行的操作系统,则可以使用指纹。 通过这样做你
为 Nmap 已知的操作系统池做出贡献,因此它将更多
对每个人都是准确的。

操作系统检测支持一些其他测试,这些测试利用收集的信息
反正在这个过程中。 其中之一是 TCP 序列可预测性分类。
这大约衡量建立一个伪造的 TCP 连接的难度
远程主机。 它对于利用基于源 IP 的信任关系(rlogin、
防火墙过滤器等)或用于隐藏攻击源。 这种欺骗是
很少执行了,但许多机器仍然容易受到它的影响。 实际上
难度数字基于统计抽样,可能会有所波动。 一般是
最好使用英语分类,例如“值得挑战”或“琐碎的笑话”。
这仅在详细的正常输出中报告(-v) 模式。 启用详细模式时
随着 -O, IP ID 序列生成也被报告。 大多数机器都在
“增量”类,这意味着它们增加了 IP 标头中的 ID 字段
他们发送的每个数据包。 这使他们容易受到一些高级信息的影响
收集和欺骗攻击。

操作系统检测启用的另一位额外信息是对目标正常运行时间的猜测。
这使用 TCP 时间戳选项(RFC 1323[10]) 猜测机器上次使用的时间
重新启动。 由于时间戳计数器未初始化,猜测可能不准确
为零或计数器溢出并环绕,因此它仅以详细打印
模式。

一份记录操作系统检测的工作、使用和定制的论文可在
https://nmap.org/book/osdetect.html.

使用以下选项启用和控制操作系统检测:

-O (启用操作系统检测)。
启用操作系统检测,如上所述。 或者,您可以使用 -A 启用操作系统
检测以及其他事情。

--osscan-限制 (将操作系统检测限制为有希望的目标)。
如果至少有一个打开的和一个关闭的 TCP 端口,操作系统检测会更有效
成立。 设置此选项,Nmap 甚至不会尝试针对这样做的主机进行操作系统检测
不符合这个标准。 这可以节省大量时间,尤其是在 P 扫描
对抗许多主机。 只有在请求操作系统检测时才重要 -O or -A.

--osscan-猜测; - 模糊 (猜操作系统检测结果)。
当 Nmap 无法检测到完美的 OS 匹配时,它有时会提供近似匹配
作为可能性。 默认情况下,Nmap 必须非常接近匹配才能执行此操作。
这些(等效)选项中的任何一个都使 Nmap 猜测更加积极。 Nmap 会
仍然会告诉您何时打印不完美的匹配并显示其置信度
(百分比)为每个猜测。

--最大操作系统尝试次数 (设置针对目标的操作系统检测尝试的最大次数)。
当 Nmap 对目标执行 OS 检测但未能找到完美匹配时,它
通常会重复尝试。 默认情况下,如果条件满足,Nmap 会尝试五次
有利于操作系统指纹提交,在条件不太好的情况下两次。
指定一个较低的 --最大操作系统尝试次数 值(例如 1)会加快 Nmap 的速度,尽管您错过了
重试可能会识别操作系统。 或者,一个高价值
可以设置为在条件有利时允许更多重试。 这很少
完成,除了生成更好的指纹以提交和集成到
Nmap 操作系统数据库。

网络地图 脚本 发动机 (NSE)


Nmap 脚本引擎 (NSE) 是 Nmap 最强大和最灵活的功能之一。 它
允许用户编写(和共享)简单的脚本(使用 LUA 编程 language[11]。
) 来自动执行各种网络任务。 这些脚本是并行执行的
以您对 Nmap 所期望的速度和效率。 用户可以依靠不断增长的
随 Nmap 分发的各种脚本集,或编写自己的脚本以满足自定义需求。

我们在创建系统时考虑的任务包括网络发现等
完善的版本检测、漏洞检测。 NSE 甚至可以用于
漏洞利用。

为了反映这些不同的用途并简化选择要运行的脚本,每个
脚本包含一个将其与一个或多个类别相关联的字段。 当前定义
类别是 auth、broadcast、default。 发现、dos、exploit、外部、fuzzer、
侵入性、恶意软件、安全、版本和漏洞。 这些都在
https://nmap.org/book/nse-usage.html#nse-categories.

脚本不在沙箱中运行,因此可能会意外或恶意损坏您的
系统或侵犯您的隐私。 除非您信任第三方,否则切勿运行来自第三方的脚本
作者或自己仔细审核了脚本。

Nmap 脚本引擎的详细描述位于 https://nmap.org/book/nse.html 提供美容纤体,
由以下选项控制:

-SC .
使用默认脚本集执行脚本扫描。 它相当于
--script=默认. 此类别中的某些脚本被认为具有侵入性和
未经许可,不应针对目标网络运行。

- 脚本 文件名|类别|目录|表达[,...] .
使用逗号分隔的文件名、脚本类别和
目录。 列表中的每个元素也可能是一个布尔表达式,描述一个
更复杂的脚本集。 每个元素首先被解释为一个表达式,然后
作为类别,最后作为文件或目录名称。

有两个特殊功能仅供高级用户使用。 一种是为脚本名称添加前缀
和带有 + 的表达式强制它们运行,即使它们通常不会运行(例如
在目标端口上未检测到相关服务)。 另一种说法是
all 可用于指定 Nmap 数据库中的每个脚本。 对此要谨慎
因为 NSE 包含危险的脚本,例如漏洞利用、暴力验证
破解程序和拒绝服务攻击。

文件和目录名称可以是相对的或绝对的。 使用绝对名称
直接地。 在以下每个地方的脚本中寻找相对路径
直到发现: --数据目录
$NMAPDIR.
〜/.nmap (未在 Windows 上搜索)。
主页\AppData\Roaming\nmap(仅在 Windows 上)。
包含 nmap 可执行文件的目录
包含 nmap 可执行文件的目录,后跟 ../share/nmap
NMAP数据目录.
当前目录。

当给出目录名称时,Nmap 加载目录中名称结尾的每个文件
与.nse。 所有其他文件都将被忽略,并且不会递归搜索目录。 什么时候
给出了文件名,它不必具有 .nse 扩展名; 它将被添加
必要时自动。 Nmap 脚本存放在 Nmap 的 scripts 子目录中
默认情况下的数据目录(请参阅 https://nmap.org/book/data-files.html)。 为了效率,
脚本在存储在 scripts/script.db 的数据库中建立索引。 其中列出了类别
或每个脚本所属的类别。 当从 script.db 引用脚本时
名称,您可以使用 shell 样式的“*”通配符。

NMAP - 脚本 “http-*”
加载名称以 http- 开头的所有脚本,例如 http-auth 和 http-open-proxy。
的论点 - 脚本 必须用引号引起来以保护通配符免受 shell 的影响。

可以使用 and、or 和 not 运算符来完成更复杂的脚本选择
构建布尔表达式。 运营商都一样 优先权[12] 如在 Lua 中:不是
最高,其次是 and 然后 or。 您可以使用括号更改优先级。
因为表达式包含空格字符,所以有必要引用它们。

NMAP - 脚本 “不是 侵扰”
加载除侵入性类别中的脚本之外的所有脚本。

NMAP - 脚本 “默认 or 安全的”
这在功能上等同于 NMAP - 脚本 “默认,安全”. 它加载所有脚本
属于默认类别或安全类别或两者。

NMAP - 脚本 “默认 安全的”
加载那些在 默认和安全类别。

NMAP - 脚本 “(默认 or 安全 or 侵入性) 而不去 http-*"
加载默认、安全或侵入性类别的脚本,除了那些
名称以 http- 开头。

--脚本参数 n1=v1,n2={n3=v3},n4={v4,v5} .
允许您为 NSE 脚本提供参数。 参数是逗号分隔的列表
名称=值对。 名称和值可以是不包含空格或
字符“{”、“}”、“=”或“,”。 要在字符串中包含这些字符之一,
将字符串括在单引号或双引号中。 在带引号的字符串中,'\' 转义
引用。 在这种特殊情况下,反斜杠仅用于转义引号; 在所有
其他情况下,反斜杠按字面解释。 值也可以是附表
在 {} 中,就像在 Lua 中一样。 一个表可能包含简单的字符串值或更多的名称值
对,包括嵌套表。 许多脚本使用脚本来限定它们的参数
名称,如 xmpp-info.server_name。 您可以使用该完全限定版本来影响
只是指定的脚本,或者您可以传递不合格的版本(server_name in
这种情况下)影响使用该参数名称的所有脚本。 脚本将首先检查
对于其完全限定的参数名称(在其文档中指定的名称)之前
它接受一个不合格的参数名称。 脚本参数的一个复杂示例是
--脚本参数
'user=foo,pass=",{}=bar",whois={whodb=nofollow+ripe},xmpp-info.server_name=localhost'.
在线 NSE 文档门户位于 https://nmap.org/nsedoc/ 列出参数
每个脚本都接受。

--script-args-文件 文件名 .
允许您从文件加载参数到 NSE 脚本。 命令行上的任何参数
取代文件中的那些。 文件可以是绝对路径,也可以是相对路径
Nmap 的常用搜索路径(NMAPDIR 等)参数可以用逗号分隔或
换行符分隔,但其他方面遵循与 for 相同的规则 --脚本参数,没有
需要特殊的引用和转义,因为它们不被 shell 解析。

--脚本帮助 文件名|类别|目录|表达|所有[,...] .
显示有关脚本的帮助。 对于每个匹配给定规范的脚本,Nmap
打印脚本名称、类别和描述。 规格是
与接受的相同 - 脚本; 因此,例如,如果您需要有关
ftp-anon 脚本,你会运行 NMAP --脚本帮助 ftp-匿名. 除了获得
单个脚本的帮助,您可以将其用作将要运行的脚本的预览
对于规范,例如 NMAP --脚本帮助 默认.

--脚本跟踪 .
这个选项有什么作用 --数据包跟踪 确实,仅高一层 ISO 层。 如果这个选项
指定所有由脚本执行的传入和传出通信被打印。
显示信息包括通讯协议、来源、目标
和传输的数据。 如果超过 5% 的传输数据不可打印,
那么跟踪输出是十六进制转储格式。 指定 --数据包跟踪 使
脚本跟踪也是如此。

--脚本更新数据库 .
此选项更新在 scripts/script.db 中找到的脚本数据库,该数据库由
Nmap 来确定可用的默认脚本和类别。 这只是必要的
如果您已从默认值中添加或删除 NSE 脚本,则更新数据库
脚本目录,或者如果您更改了任何脚本的类别。 这个选项是
一般单独使用: NMAP --脚本更新数据库.

时序 AND 性能


我最高的 Nmap 开发优先级之一一直是性能。 默认扫描
(NMAP 主机) 的本地网络上的主机需要五分之一秒。 那是勉强
有足够的时间来眨眼,但是当您扫描成百上千的主机时就会累积起来。
此外,某些扫描选项如 UDP 扫描和版本检测可以增加
扫描次数大幅增加。 某些防火墙配置也是如此,特别是响应
速率限制。 而 Nmap 利用并行性和许多高级算法来加速
通过这些扫描,用户可以最终控制 Nmap 的运行方式。 专家用户用心
制作 Nmap 命令以在满足他们的需求时仅获取他们关心的信息
时间限制。

改进扫描时间的技术包括省略非关键测试,以及升级到
最新版本的 Nmap(经常进行性能增强)。 优化
时序参数也可以产生显着差异。 下面列出了这些选项。

某些选项接受时间参数。 默认情况下,这是以秒为单位指定的,尽管您
可以将“ms”、“s”、“m”或“h”附加到值以指定毫秒、秒、分钟、
或小时。 所以 --主机超时 参数 900000ms、900、900s 和 15m 都做同样的事情
事情。

--min-主机组 主机数; --max-主机组 主机数 (调整并行扫描组大小)。
Nmap 具有并行端口扫描或版本扫描多个主机的能力。 地图
为此,将目标 IP 空间划分为多个组,然后一次扫描一组
时间。 一般来说,更大的团体更有效率。 缺点是主机结果
不能提供,直到整个组完成。 因此,如果 Nmap 以
组大小为 50,用户将不会收到任何报告(除了更新
以详细模式提供),直到前 50 个主机完成。

默认情况下,Nmap 对这种冲突采取折衷的方法。 它开始于
小组人数低至五人,因此第一个结果很快就会出现,然后增加
groupsize 高达 1024。确切的默认数字取决于给定的选项。
出于效率原因,Nmap 对 UDP 或少端口 TCP 扫描使用更大的组大小。

当最大组大小指定为 --max-主机组, Nmap 永远不会超过
那个大小。 指定最小尺寸 --min-主机组 并且 Nmap 将尝试保持组
尺寸高于该水平。 Nmap 可能必须使用比您指定的更小的组,如果有
在给定的接口上没有足够的目标主机来完成指定的
最低限度。 两者都可以设置为将组大小保持在特定范围内,尽管这
很少需要。

这些选项在扫描的主机发现阶段不起作用。 这
包括普通 ping 扫描(-sn)。 主机发现始终适用于大型主机组
以提高速度和准确性。

这些选项的主要用途是指定一个较大的最小组大小,以便
全扫描运行得更快。 一个常见的选择是 256 扫描 C 类大小的网络
大块。 对于具有许多端口的扫描,超过该数量不太可能有太大帮助。
对于仅扫描几个端口号的情况,2048 或更大的主机组大小可能会有所帮助。

--最小并行度 数量探针; --最大并行度 数量探针 (调整探针并行化)。
这些选项控制主机可能未完成的探测总数
团体。 它们用于端口扫描和主机发现。 默认情况下,Nmap 计算
基于网络性能的不断变化的理想并行性。 如果数据包被
丢弃,Nmap 减慢并允许更少的未完成探测。 理想的探针数
随着网络证明自己的价值,它会慢慢上升。 这些选项放置最小或
该变量的最大界限。 默认情况下,理想的并行度可以降为 XNUMX,如果
网络被证明是不可靠的,并且在完美的条件下上升到数百个。

最常见的用法是设置 --最小并行度 到一个大于一的数字来加速
对性能不佳的主机或网络进行向上扫描。 这是一个冒险的选择,
因为设置得太高可能会影响准确性。 设置这个也会降低Nmap的能力
根据网络状况动态控制并行度。 值 10 可能是
合理,虽然我只是作为最后的手段调整这个值。

这个 --最大并行度 选项有时设置为 XNUMX 以防止 Nmap 发送更多
一次对主机进行一次探测。 这 --扫描延迟 选项,稍后讨论,是
另一种方法来做到这一点。

--min-rtt-超时 , --max-rtt-超时 , --初始 rtt 超时 (调整探头
超时)。
Nmap 维护一个运行超时值来确定它将等待多长时间
在放弃或重新传输探测之前探测响应。 这是根据计算
关于先前探针的响应时间。

如果网络延迟本身显着且可变,则此超时可以
增长到几秒钟。 它也从保守(高)水平开始,并可能保持
当 Nmap 扫描无响应的主机时,这种方式会持续一段时间。

指定一个较低的 --max-rtt-超时--初始 rtt 超时 比默认值可以
显着缩短扫描时间。 这对于无 ping (P) 扫描,和
那些反对严重过滤网络的人。 不过不要太咄咄逼人。 扫描可以
如果您指定的值如此之低以至于许多探测器超时,最终会花费更长的时间
并在响应传输时重新传输。

如果所有主机都在本地网络上,则 100 毫秒 (--max-rtt-超时 100ms)是
一个合理的进取值。 如果涉及路由,则ping网络上的主机
首先使用 ICMP ping 实用程序,或使用自定义数据包工具(例如 Nping)。 那
更有可能通过防火墙。 查看最大往返时间
十包左右。 你可能想把它加倍 --初始 rtt 超时
三倍或四倍 --max-rtt-超时. 我一般不设置最大值
无论 ping 时间是多少,RTT 都低于 100 毫秒。 我也不超过 1000 毫秒。

--min-rtt-超时 是一个很少使用的选项,当网络如此时可能很有用
不可靠的是,即使是 Nmap 的默认设置也过于激进。 由于 Nmap 只会减少
当网络看起来可靠时,超时降至最低,这个需要是
不寻常,应该作为错误报告到 nmap-dev 邮件列表..

--最大重试次数 数字 (指定端口扫描探测重传的最大次数)。
当 Nmap 没有收到对端口扫描探测的响应时,这可能意味着该端口是
过滤。 或者,探测或响应可能只是在网络上丢失了。 也是
可能目标主机启用了速率限制,暂时阻止了
回复。 因此 Nmap 通过重新传输初始探测再次尝试。 如果 Nmap 检测到
网络可靠性差,在放弃端口之前可能会尝试更多次。 尽管
这有利于准确性,同时也延长了扫描时间。 当性能至关重要时,
可以通过限制允许的重传次数来加快扫描速度。 你甚至可以
指定 --最大重试次数 0 防止任何重新传输,虽然这只是
建议用于非正式调查等偶尔错过港口和
主机是可以接受的。

默认(没有 -T 模板)是允许十次重传。 如果网络看起来
可靠并且目标主机没有速率限制,Nmap 通常只做一个
重传。 所以大多数目标扫描甚至不受掉落影响 --最大重试次数
一个低值,如三。 这些值可以大大加快慢速(速率
有限)主机。 当 Nmap 提前放弃端口时,您通常会丢失一些信息,
虽然这可能比让 --主机超时 过期并失去所有
有关目标的信息。

--主机超时 (放弃缓慢的目标主机)。
一些主机只是采取 扫描的时间。 这可能是由于表现不佳或
不可靠的网络硬件或软件、数据包速率限制或限制
防火墙。 最慢的百分之几的扫描主机可以吃掉大部分
扫描时间。 有时最好先减少损失并跳过这些主机。
指定 --主机超时 您愿意等待的最长时间。 为了
例如,指定 30m 以确保 Nmap 不会浪费超过半小时的时间
单主机。 请注意,在此期间 Nmap 可能会同时扫描其他主机
半小时,所以它不是一个完整的损失。 跳过超时的主机。 无端口
为该主机打印表、操作系统检测或版本检测结果。

--扫描延迟 ; --最大扫描延迟 (调整探头之间的延迟)。
此选项使 Nmap 至少在每个探测之间等待给定的时间
它发送到给定的主机。 这在速率限制的情况下特别有用。
Solaris 机器(以及许多其他机器)通常会响应 UDP 扫描探测数据包
每秒只有一个 ICMP 消息。 任何超过 Nmap 发送的将是
浪费。 一个 --扫描延迟 1s 将使 Nmap 保持在那个缓慢的速度。 Nmap 尝试检测
速率限制并相应地调整扫描延迟,但指定它并没有什么坏处
如果您已经知道什么速率最有效,则明确。

当Nmap向上调整扫描延迟以应对速率限制时,扫描变慢
急剧下降。 这 --最大扫描延迟 选项指定 Nmap 的最大延迟
会允许。 一个低 --最大扫描延迟 可以加速Nmap,但是有风险。 设置这个
值太低会导致浪费的数据包重传和可能丢失端口
当目标实施严格的速率限制时。

另一种用途 --扫描延迟 是逃避基于阈值的入侵检测和
预防系统 (IDS/IPS)..

--最低速率 ; --最大速率 (直接控制扫描速度)。
Nmap 的动态时序在找到合适的速度方面做得很好
扫描。 然而,有时您可能会碰巧知道一个合适的扫描速率
网络,或者您可能必须保证扫描将在特定时间完成。
或者也许您必须防止 Nmap 扫描得太快。 这 --最低速率--最大速率
选项是为这些情况设计的。

当。。。的时候 --最低速率 给出选项 Nmap 将尽最大努力以最快的速度发送数据包
或比给定的速率更快。 参数是一个正实数,表示一个
数据包速率(以每秒数据包为单位)。 例如,指定 --最低速率 300 意思是
Nmap 将尝试将发送速率保持在每秒 300 个数据包或更高。 指定
如果条件允许,最低速率不会阻止 Nmap 运行得更快。

同样, --最大速率 将扫描的发送速率限制为给定的最大值。 利用 --最大速率
100例如,在快速网络上将发送限制为每秒 100 个数据包。 利用
--最大速率 0.1 每十秒缓慢扫描一个数据包。 利用 --最低速率
--最大速率 一起将速率保持在一定范围内。

这两个选项是全局的,影响整个扫描,而不是单个主机。 他们
只影响端口扫描和主机发现扫描。 其他功能,如操作系统检测
执行自己的计时。

实际扫描速率可能低于要求的有两种情况
最低限度。 第一个是最小值是否比 Nmap 可以达到的最快速率更快
发送,这取决于硬件。 在这种情况下,Nmap 将简单地发送数据包
尽快,但请注意,如此高的利率可能会导致损失
准确性。 第二种情况是当 Nmap 没有什么可发送的时候,例如在
当最后一个探测已经发送并且 Nmap 正在等待它们超时或
得到回应。 在扫描结束或扫描中看到扫描速率下降是正常的
主机组之间。 发送速率可能会暂时超过最大值来弥补
不可预测的延迟,但平均而言,速率将保持在或低于最大值。

应谨慎指定最低费率。 扫描速度比网络快
支持可能会导致准确性的损失。 在某些情况下,使用更快的速率可以使
扫一扫 不再 比它更慢的速度。 这是因为 Nmap 的自适应
重传算法将检测由过度的网络拥塞
扫描速率并增加重传次数以提高准确性。
因此,即使数据包以更高的速率发送,总体上也会发送更多的数据包。 帽
重传次数 --最大重试次数 如果您需要设置一个选项
总扫描时间的上限。

--defeat-rate-limit .
许多主机长期使用速率限制。 减少ICMP错误消息的数量
(例如端口不可达错误)他们发送。 一些系统现在应用类似的费率
对它们生成的 RST(重置)数据包的限制。 这会显着降低 Nmap 的速度
因为它会调整时间以反映这些速率限制。 你可以告诉 Nmap 忽略
那些速率限制(对于端口扫描,例如 SYN 扫描, 治疗无反应
端口为开放)通过指定 --defeat-rate-limit.

使用此选项会降低准确性,因为某些端口会出现无响应
因为 Nmap 没有等待足够长的时间来获得速率限制的 RST 响应。 通过 SYN 扫描,
无响应导致端口被标记为过滤而不是关闭
我们在收到 RST 数据包时看到的状态。 当您只关心时,此选项很有用
关于开放端口,区分关闭端口和过滤端口是不值得的
额外的时间。

--nsock-引擎 epoll|kqueue|投票|选择 .
强制使用给定的 nsock IO 多路复用引擎。 只有 选择(2) 基于回退
引擎保证在您的系统上可用。 引擎以名字命名
他们利用的 IO 管理工具。 目前实现的引擎是 epoll,
kqueue、poll 和 select,但并非所有平台都将出现在任何平台上。 利用 NMAP -V
查看支持哪些引擎。

-T 偏执|狡猾|礼貌|正常|好斗|疯狂 (设置计时模板)。
虽然上一节中讨论的细粒度时序控制功能强大
并且有效,有些人发现它们令人困惑。 此外,选择合适的
值有时可能比您尝试优化的扫描花费更多时间。 所以Nmap
提供了一种更简单的方法,有六个计时模板。 您可以使用 -T
选项及其编号 (0–5) 或名称。 模板名称是 偏执 (0),
偷偷摸摸 (1), 有礼貌 (2), 正常 (3), 侵略性 (4), (5)。 前两个是
用于 IDS 规避。 礼貌模式会减慢扫描速度以使用更少的带宽和目标
机资源。 正常模式是默认的,所以 -T3 什么也没做。 激进模式
通过假设您处于相当快的速度并加快扫描速度
可靠的网络。 最后疯狂模式。 假设你在一个非常
快速网络或愿意为速度牺牲一些准确性。

这些模板允许用户指定他们希望的攻击性,同时
让 Nmap 选择准确的时序值。 模板也有一些小速度
当前不存在细粒度控制选项的调整。 为了
例, -T4. 禁止 TCP 端口的动态扫描延迟超过 10 毫秒和
-T5 将该值限制在 5 毫秒。 模板可以与细粒度的结合使用
控件,并且您指定的细粒度控件将优先于
该参数的计时模板默认值。 我建议使用 -T4 扫描时
相当现代和可靠的网络。 即使您添加,也要保留该选项
细粒度的控制,以便您从那些额外的小优化中受益
启用。

如果您使用的是不错的宽带或以太网连接,我总是建议您
运用 -T4. 有些人爱 -T5 虽然它对我的口味来说太激进了。 人们
有时指定 -T2 因为他们认为主机崩溃的可能性较小,或者因为
他们认为自己总体上很有礼貌。 他们往往没有意识到如何
放慢 -T 有礼貌. 真的是。 他们的扫描时间可能比默认扫描时间长十倍。
使用默认计时选项(-T3)
所以我通常建议谨慎的扫描仪使用它。 省略版本检测是
在减少这些问题方面,比使用时序值更有效。

-T0。 和 -T1. 可能有助于避免 IDS 警报,他们将采取
扫描数千台机器或端口的时间非常长。 这么长时间
扫描,您可能更喜欢设置您需要的确切时间值,而不是依赖于
罐头 -T0-T1 值。

的主要影响 T0 正在序列化扫描,以便一次只扫描一个端口,
并在发送每个探测之间等待五分钟。 T1T2 是相似的,但他们
两次探测之间仅分别等待 15 秒和 0.4 秒。 T3. 是 Nmap 的
默认行为,包括并行化。 -T4 相当于
--max-rtt-超时 1250ms --min-rtt-超时 100ms --初始 rtt 超时 500ms
--最大重试次数 6 并将最大 TCP 扫描延迟设置为 10 毫秒。 T5 做的
相当于 --max-rtt-超时 300ms --min-rtt-超时 50ms --初始 rtt 超时
250ms --最大重试次数 2 --主机超时 15 m 以及设置最大 TCP 扫描延迟
到 5 毫秒。

防火墙/IDS 规避问题 AND 欺骗


许多互联网先驱设想了一个具有通用 IP 地址空间的全球开放网络
允许任意两个节点之间的虚拟连接。 这允许主机充当真
对等体,相互服务和检索信息。 人们可以访问所有
他们的家庭系统从工作、改变气候控制设置或解锁门
对于早期的客人。 这种通用连接的愿景已被地址空间扼杀
短缺和安全问题。 在 1990 年代初期,组织开始部署
防火墙的明确目的是减少连接。 庞大的网络被封锁
通过应用程序代理、网络地址转换和
数据包过滤器。 不受限制的信息流动让位于严格的监管
批准的沟通渠道和通过这些渠道的内容。

防火墙等网络障碍会使映射网络变得极其困难。
它不会变得更容易,因为扼杀随意侦察通常是一个关键目标
实现设备。 尽管如此,Nmap 提供了许多功能来帮助理解这些
复杂的网络,并验证过滤器是否按预期工作。 它甚至支持
绕过实施不佳的防御的机制。 最好的方法之一
了解您的网络安全态势就是试图打败它。 将自己置于
攻击者的心态,并针对您的网络部署本节中的技术。
启动 FTP 反弹扫描、空闲扫描、碎片攻击,或尝试通过一个隧道
您自己的代理。

除了限制网络活动外,公司越来越多地监控流量
与入侵检测系统(IDS)。 所有主要的 IDS 都附带了旨在
检测 Nmap 扫描,因为扫描有时是攻击的前兆。 其中许多
产品最近变成了入侵 预防 系统 (IPS)。 那个积极的
阻止被视为恶意的流量。 不幸的是,对于网络管理员和 IDS 供应商来说,
通过分析数据包数据可靠地检测恶意是一个棘手的问题。 攻击者
有耐心、技巧和某些 Nmap 选项的帮助通常可以通过 IDS
未被发现。 同时,管理员必须应对大量误报
误诊和警告或阻止无辜活动的结果。

偶尔有人建议 Nmap 不应该提供逃避防火墙规则的功能
或偷偷溜过 IDS。 他们争辩说,这些功能同样有可能被滥用
管理员用来增强安全性的攻击者。 这个逻辑的问题是
攻击者仍然会使用这些方法,他们只会找到其他工具或
将功能修补到 Nmap 中。 同时,管理员会发现它太多了
更难做自己的工作。 只部署现代的、打过补丁的 FTP 服务器是一种更强大的
防御比试图阻止实现 FTP 反弹的工具的分发
攻击。

没有用于检测和破坏防火墙和 IDS 的灵丹妙药(或 Nmap 选项)
系统。 这需要技巧和经验。 教程超出了本参考的范围
指南,它只列出了相关的选项并描述了它们的作用。

-f (片段包); --mtu (使用指定的 MTU)。
这个 -f 选项导致请求的扫描(包括 ping 扫描)使用微小的碎片
IP数据包。 这个想法是将 TCP 标头拆分为多个数据包以使其
包过滤器、入侵检测系统和其他烦恼更难检测
你在做什么。 小心这个! 一些程序在处理这些时遇到问题
小包。 名为 Snifit 分段的老式嗅探器立即出现故障
收到第一个片段后。 指定此选项一次,Nmap 将拆分
IP 标头后的数据包转换为 20 个字节或更少。 所以一个 XNUMX 字节的 TCP 标头将是
分成三个包。 两个带有 XNUMX 个字节的 TCP 标头,一个带有
最后四。 当然每个分片也有一个IP头。 指定 -f 再次使用 16
每个片段的字节数(减少片段的数量)。或者您可以指定自己的
偏移大小与 --mtu 选项。 也不要指定 -f 如果您使用 --mtu. 偏移量
必须是八的倍数。 虽然分片的数据包不会被数据包过滤器和
将所有 IP 片段排队的防火墙,例如 CONFIG_IP_ALWAYS_DEFRAG 选项
Linux 内核,某些网络无法承受由此导致的性能下降,因此
让它禁用。 其他人无法启用此功能,因为片段可能需要不同
路由到他们的网络。 一些源系统对传出的数据包进行碎片整理
核心。 linux用iptables。 连接跟踪模块就是这样的一个例子。 做一个
使用 Wireshark 等嗅探器进行扫描。 正在运行以确保发送的数据包
支离破碎。 如果您的主机操作系统导致问题,请尝试 --发送eth. 绕过选项
IP 层并发送原始以太网帧。

分片仅支持 Nmap 的原始数据包特性,包括 TCP 和
UDP 端口扫描(连接扫描和 FTP 反弹扫描除外)和操作系统检测。 特征
如版本检测和 Nmap Scripting Engine 一般不支持
碎片,因为它们依赖于您主机的 TCP 堆栈与目标通信
服务。

-D decoy1[,decoy2][,我][,...] (用诱饵掩盖扫描)。
导致执行诱饵扫描,这使得远程主机看起来
您指定为诱饵的主机也在扫描目标网络。 因此他们的IDS
可能会报告来自唯一 IP 地址的 5-10 个端口扫描,但他们不知道哪个 IP
正在扫描它们,它们是无辜的诱饵。 虽然这可以通过
路由器路径跟踪、响应丢弃等主动机制,一般是
一种隐藏 IP 地址的有效技术。

用逗号分隔每个诱饵主机,您可以选择使用 ME。 作为其中之一
诱饵来代表您的真实 IP 地址的位置。 如果你把我放在第六
位置或更高版本,一些常见的端口扫描检测器(例如 Solar Designer's.
优秀的Scanlogd)。 根本不可能显示您的 IP 地址。 如果你不使用
我,Nmap 会让你处于随机位置。 您也可以使用 RND。 生成一个
随机、非保留 IP 地址或 RND: 生成 地址。

请注意,您用作诱饵的主机应该已启动,否则您可能会意外发生 SYN 泛洪
你的目标。 也很容易确定哪个主机正在扫描,如果只是
一个实际上是在网络上。 您可能想要使用 IP 地址而不是名称
(因此诱饵网络在他们的名称服务器日志中看不到您)。

诱饵用于初始 ping 扫描(使用 ICMP、SYN、ACK 或其他)和
在实际的端口扫描阶段。 在远程操作系统检测期间也使用诱饵
(-O)。 诱饵不适用于版本检测或 TCP 连接扫描。 当扫描延迟
实际上,延迟是在每批欺骗探针之间强制执行的,而不是在
每个单独的探针。 由于诱饵是一次性批量发送的,因此它们可能
暂时违反拥塞控制限制。

值得注意的是,使用过多的诱饵可能会减慢您的扫描速度,甚至可能
使它不那么准确。 此外,一些 ISP 会过滤掉您的欺骗数据包,但许多
根本不限制欺骗性 IP 数据包。

-S IP地址 (恶搞源地址)。
在某些情况下,Nmap 可能无法确定您的源地址(Nmap
会告诉您是否是这种情况)。 在这种情况下,使用 -S 与 IP 地址
您希望通过其发送数据包的接口。

此标志的另一个可能用途是欺骗扫描,使目标认为
有人 其他 正在扫描它们。 想象一家公司被重复端口扫描
竞争者! 这 -e 选项和 P 通常需要这种用法。 笔记
您通常不会收到回复数据包(它们将被寻址到 IP
你在欺骗),所以 Nmap 不会产生有用的报告。

-e 接口 (使用指定接口)。
告诉 Nmap 在哪个接口上发送和接收数据包。 Nmap 应该可以
自动检测到这一点,但如果不能,它会告诉你。

--源端口 端口号; -g 端口号 (欺骗源端口号)。
一种令人惊讶的常见错误配置是仅根据来源信任流量
端口号。 很容易理解这是如何发生的。 管理员将设置
安装一个闪亮的新防火墙,却被忘恩负义的用户的抱怨淹没
其应用程序停止工作。 特别是,DNS 可能会因为 UDP
来自外部服务器的 DNS 回复无法再进入网络。 FTP 是另一个
常见的例子。 在主动 FTP 传输中,远程服务器尝试建立一个
连接回客户端以传输请求的文件。

这些问题的安全解决方案通常以应用程序级的形式存在
代理或协议解析防火墙模块。 不幸的是,也有更容易的,
不安全的解决方案。 请注意 DNS 回复来自端口 53,活动 FTP 来自端口
20、很多管理员掉进了简单允许传入流量的陷阱
从那些港口。 他们通常假设没有攻击者会注意到并利用这些
防火墙漏洞。 在其他情况下,管理员认为这是一个短期的权宜之计
直到他们可以实施更安全的解决方案。 然后他们忘记了安全
升级。

掉入这个陷阱的不只是过度工作的网络管理员。
许多产品附带这些不安全的规则。 连微软都被
有罪。 Windows 2000 和 Windows XP 附带的 IPsec 过滤器包含一个
允许来自端口 88 (Kerberos) 的所有 TCP 或 UDP 流量的隐式规则。 在另一个
众所周知的案例,区域警报个人防火墙的版本高达 2.1.25 允许任何
具有源端口 53 (DNS) 或 67 (DHCP) 的传入 UDP 数据包。

Nmap 提供了 -g--源端口 选项(它们是等效的)来利用这些
弱点。 只需提供一个端口号,Nmap 就会从该端口发送数据包
在可能的情况。 大多数使用原始套接字的扫描操作,包括 SYN 和 UDP
扫描,完全支持选项。 该选项特别对
任何使用正常操作系统套接字的操作,包括 DNS 请求、TCP
联接 扫描,。 版本检测和脚本扫描。 还要设置源端口
不适用于操作系统检测,因为 Nmap 必须使用不同的端口号
某些操作系统检测测试才能正常工作。

- 数据 十六进制 绳子 (将自定义二进制数据附加到发送的数据包)。
此选项允许您在发送的数据包中包含二进制数据作为有效负载。 十六进制 绳子 五月
以以下任何一种格式指定:0xAABBCCDDEEFF..., AABBCCDDEFF... or
\xAA\xBB\xCC\xDD\xEE\xFF.... 使用示例是 - 数据 0x死牛肉- 数据
\xCA\xFE\x09. 请注意,如果您指定像 0x00ff 这样的数字,则不会进行字节顺序转换
被执行。 确保按预期的字节顺序指定信息
接收器。

--数据字符串 绳子 (将自定义字符串附加到发送的数据包)。
此选项允许您在发送的数据包中包含一个常规字符串作为有效负载。 绳子 能够
包含任何字符串。 但是,请注意,某些字符可能取决于您的系统
区域设置和接收器可能看不到相同的信息。 另外,请确保您附上
双引号中的字符串并从外壳中转义任何特殊字符。
例子: --数据字符串 “扫描 进行 by 安全性 行动, 延期 7192“ or
--数据字符串 “Ph34r my 33吨 技能”. 请记住,实际上没有人可能
查看此选项留下的任何评论,除非他们仔细监视网络
使用嗅探器或自定义 IDS 规则。

--数据长度 (将随机数据附加到发送的数据包中)。
通常 Nmap 发送只包含一个头部的极简数据包。 所以它的 TCP 数据包
通常是 40 个字节,ICMP 回显请求只有 28 个。一些 UDP 端口。 和知识产权
协议。 默认情况下获取自定义有效负载。 这个选项告诉 Nmap 附加
给它发送的大多数数据包指定数量的随机字节,并且不使用任何
特定于协议的有效载荷。 (利用 --数据长度 0 没有随机或特定于协议的
有效载荷.. 操作系统检测(-O) 数据包不受影响。 因为那里的准确性
需要探测一致性,但大多数 ping 和端口扫描数据包都支持这一点。 它
稍微减慢速度,但可以使扫描稍微不那么显眼。

--ip-选项 SR|R [路线]|L [路线]|T|U ... ; --ip-选项 十六进制 绳子 (发送数据包
指定的 ip 选项)。
这个 IP 协议[13] 提供了几个可以放置在数据包头中的选项。
与无处不在的 TCP 选项不同,IP 选项由于实用性和
安全问题。 事实上,许多 Internet 路由器会阻止最危险的选项
比如源路由。 然而,在某些情况下,选项仍然可以用于确定
并操纵到目标机器的网络路由。 例如,您可以
即使在更传统的情况下,也可以使用记录路由选项来确定到目标​​的路径
traceroute 风格的方法失败。 或者如果您的数据包被某个人丢弃
防火墙,您可以使用严格或松散的源指定不同的路由
路由选项。

指定 IP 选项的最强大方法是简单地将值作为
争论 --ip-选项. 在每个十六进制数之前加上 \x,然后是两位数。 您可以
重复某些字符,在它们后面加上星号,然后是数量
你希望他们重复的次数。 例如,\x01\x07\x04\x00*36\x01 是一个十六进制字符串
包含 36 个 NUL 字节。

Nmap 还提供了一种用于指定选项的快捷机制。 简单地传递信
R、T 或 U 请求记录路由,。 记录时间戳,。 或两个选项一起,
分别。 松散或严格的源路由。 可以用 L 或 S 指定
后跟一个空格,然后是一个以空格分隔的 IP 地址列表。

如果您希望查看发送和接收的数据包中的选项,请指定 --数据包跟踪.
有关在 Nmap 中使用 IP 选项的更多信息和示例,请参阅
http://seclists.org/nmap-dev/2006/q3/52.

--ttl 折扣值 (设置 IP 生存时间字段)。
将发送的数据包中的 IPv4 生存时间字段设置为给定值。

--随机主机 (随机化目标宿主顺序)。
告诉 Nmap 在扫描它们之前对每组最多 16384 个主机进行洗牌。 这个可以
使扫描对各种网络监控系统不那么明显,尤其是当您
将它与慢计时选项结合起来。 如果您想对更大的组进行随机化,
提高 PING_GROUP_SZ. 在 nmap.h 中。 并重新编译。 另一种解决方案是
使用列表扫描生成目标 IP 列表(-sL -n -在 文件名),将其随机化
一个 Perl 脚本,然后将整个列表提供给 Nmap -iL..

--spoof-mac MAC 地址, 字首, or 供应商 姓名 (欺骗MAC地址)。
要求 Nmap 将给定的 MAC 地址用于它发送的所有原始以太网帧。
这个选项意味着 --发送eth. 确保 Nmap 实际发送以太网级
数据包。 给定的 MAC 可以采用多种格式。 如果只是数字0,Nmap
为会话选择一个完全随机的 MAC 地址。 如果给定的字符串是
偶数个十六进制数字(可选用冒号分隔的对),Nmap 将
将它们用作 MAC。 如果提供的十六进制数字少于 12 个,Nmap 将填写
带有随机值的六个字节的其余部分。 如果参数不是零或十六进制
字符串,Nmap 通过 nmap-mac-prefixes 查找包含
给定的字符串(不区分大小写)。 如果找到匹配项,Nmap 使用供应商的 OUI
(三字节前缀)。 并随机填写剩余的三个字节。 有效的
--spoof-mac 参数示例是 Apple, 0, 01:02:03:04:05:06, deadbeefcafe, 0020F2,
和思科。 此选项仅影响原始数据包扫描,例如 SYN 扫描或操作系统检测,
不是面向连接的功能,例如版本检测或 Nmap 脚本
发动机。

--代理 逗号分隔 名单 of 代理 网址 (通过一系列的中继 TCP 连接
代理)。
要求 Nmap 通过提供的链建立与最终目标的 TCP 连接
一个或多个 HTTP 或 SOCKS4 代理。 代理可以帮助隐藏扫描的真实来源或
逃避某些防火墙限制,但它们可能会妨碍扫描性能
增加延迟。 用户可能需要调整 Nmap 超时和其他扫描参数
因此。 特别是较低的 --最大并行度 可能会有所帮助,因为某些代理
默认情况下,拒绝处理与 Nmap 打开的一样多的并发连接。

此选项将代理列表作为参数,以格式表示为 URL
原型://主机:端口。 使用逗号分隔链中的节点 URL。 没有认证是
还支持。 有效的协议是 HTTP 和 SOCKS4。

警告:此功能仍在开发中并有局限性。 它是
在 nsock 库中实现,因此对 ping、端口扫描没有影响
和操作系统发现阶段的扫描。 只有 NSE 和版本扫描受益于此选项
到目前为止 - 其他功能可能会透露您的真实地址。 SSL 连接尚未完成
支持,也不支持代理端 DNS 解析(主机名总是由 Nmap 解析)。

--巴德苏姆 (发送带有虚假 TCP/UDP 校验和的数据包)。
要求 Nmap 对发送到目标的数据包使用无效的 TCP、UDP 或 SCTP 校验和
主机。 由于几乎所有主机 IP 堆栈都会正确丢弃这些数据包,因此任何响应
收到的可能来自防火墙或 IDS,它们不费心去验证
校验和。 有关此技术的更多详细信息,请参阅 https://nmap.org/p60-12.html

--adler32 (对于 SCTP 校验和,使用已弃用的 Adler32 而不是 CRC32C)。
要求 Nmap 使用已弃用的 Adler32 算法来计算 SCTP 校验和。
If --adler32 未给出,使用 CRC-32C (Castagnoli)。 RFC 2960[14] 原来
将 Adler32 定义为 SCTP 的校验和算法; RFC 4960[7] 后来重新定义了 SCTP
校验和以使用 CRC-32C。 当前的 SCTP 实现应该使用 CRC-32C,但在
为了从旧的、遗留的 SCTP 实现中引起响应,它可能更可取
使用 Adler32。

OUTPUT


任何安全工具仅与其生成的输出一样有用。 复杂的测试和
如果算法没有以有组织和易于理解的方式呈现,那么它们就没有什么价值
时尚。 鉴于人们和其他软件使用 Nmap 的多种方式,没有单一的
格式可以取悦每个人。 所以 Nmap 提供了几种格式,包括交互模式
供人类直接阅读,XML 便于软件解析。

除了提供不同的输出格式,Nmap 还提供了控制选项
输出的详细程度以及调试消息。 输出类型可以发送到
标准输出或命名文件,Nmap 可以附加到或破坏。 输出文件可能
也可用于恢复中止的扫描。

Nmap 提供五种不同格式的输出。 默认称为交互式
输出,。 并将其发送到标准输出(stdout)。还有正常输出,。
这类似于交互式,除了它显示较少的运行时信息和
警告,因为它预计在扫描完成后进行分析,而不是
交互地。

XML 输出。 是最重要的输出类型之一,因为它可以转换为 HTML,
易于被 Nmap 图形用户界面等程序解析,或导入
数据库。

剩下的两种输出类型是简单的 grepable 输出。 其中包括大多数
单行目标主机的信息,以及 sCRiPt KiDDi3 0utPUt。 对于用户
认为自己|<-r4d。

虽然交互式输出是默认的并且没有关联的命令行选项,但
其他四个格式选项使用相同的语法。 他们采取了一个论点,那就是
结果应该存储在其中的文件名。可以指定多种格式,但每个
格式只能指定一次。 例如,您可能希望将正常输出保存为
您自己的审查,同时保存相同扫描的 XML 以进行程序分析。 你可能会
这与选项 -牛 我的扫描文件 -在 myscan.nmap. 虽然本章使用了简单的
为简洁起见,像 myscan.xml 这样的名称,通常建议使用更具描述性的名称。 这
选择的名字是个人喜好的问题,虽然我使用长的包含
扫描日期和一两个描述扫描的词,放在以扫描日期命名的目录中
我正在扫描的公司。

当这些选项将结果保存到文件时,Nmap 仍然将交互式输出打印到标准输出
照常。 例如,命令 NMAP -牛 我的扫描文件 目标 将 XML 打印到 myscan.xml 和
用相同的交互式结果填充标准输出,如果 -牛
根本没有指定。 你可以通过传递一个连字符作为参数来改变它
到其中一种格式类型。 这会导致 Nmap 停用交互式输出,而是
以您为标准输出流指定的格式打印结果。 所以命令
NMAP -牛 - 目标 将仅将 XML 输出发送到 stdout.. 可能仍会出现严重错误
打印到正常的错误流,stderr..

与某些 Nmap 参数不同,日志文件选项标志之间的空格(例如 -牛) 以及
文件名或连字符是强制性的。 如果您省略标志并提供参数,例如 -oG-
or -oXscan.xml, Nmap 的向后兼容特性将导致创建
正常 格式 输出文件分别命名为 G- 和 Xscan.xml。

所有这些论点都支持 时间-喜欢。 文件名中的转换。 %H、%M、%S、
%m、%d、%y 和 %Y 都与 时间. %T 与 %H%M%S、%R 相同
与 %H%M 相同,而 %D 与 %m%d%y 相同。 一个 % 后跟任何其他字符
只是产生那个字符(%% 给你一个百分比符号)。 所以 -牛 '扫描-%T-%D.xml'
使用名称为 scan-144840-121307.xml 的 XML 文件。

Nmap 还提供了控制扫描详细程度和附加到输出文件的选项,而不是
而不是殴打他们。 下面描述了所有这些选项。

NMAP 输出 格式

-在 文件规格 (正常输出)。
请求将正常输出定向到给定的文件名。 如上所述,
这与交互式输出略有不同。

-牛 文件规格 (XML 输出)。
请求将 XML 输出定向到给定的文件名。 Nmap 包含一个文档
类型定义 (DTD),它允许 XML 解析器验证 Nmap XML 输出。 虽然它
主要用于编程用途,它还可以帮助人类解释 Nmap XML
输出。 DTD 定义了格式的合法元素,并且经常列举
他们可以采用的属性和值。 最新版本始终可从
https://svn.nmap.org/nmap/docs/nmap.dtd.

XML 提供了一种易于软件解析的稳定格式。 免费的 XML 解析器是
适用于所有主要计算机语言,包括 C/C++、Perl、Python 和 Java。
人们甚至为大多数这些语言编写了绑定来处理 Nmap 输出
和具体执行。 例子是 Nmap::扫描仪[15]。 和 Nmap::解析器[16]。 在
Perl CPAN。 在几乎所有非平凡应用程序与 Nmap 接口的情况下,
XML 是首选格式。

XML 输出引用一个 XSL 样式表,该样式表可用于将结果格式化为
HTML。 使用它的最简单方法是在 Web 浏览器中加载 XML 输出
例如 Firefox 或 IE。 默认情况下,这仅适用于您运行 Nmap 的机器
(或类似配置的)由于硬编码的 nmap.xsl 文件系统路径。 利用
这些因素包括原料奶的可用性以及达到必要粉末质量水平所需的工艺。 --webxml or --样式表 创建呈现为 HTML 的可移植 XML 文件的选项
在任何联网的机器上。

-操作系统 文件规格 (脚本 KIdd|3 个输出)。
脚本小子输出类似于交互式输出,只是它被后处理为
更适合之前看不起Nmap的l33t HaXXorZ,因为它的一致性
大小写和拼写。 幽默受损的人应该注意这个选项是
在指责我“帮助他们”之前取笑脚本小子。

-oG 文件规格 (grepable 输出)。
此输出格式最后介绍,因为它已被弃用。 XML 输出格式是
功能要强大得多,对于有经验的用户来说几乎同样方便。 XML 是一个
有几十个优秀的解析器可用的标准,而 grepable 输出是
我自己的简单黑客。 XML 可扩展以支持新的 Nmap 功能
发布,而我经常必须从 grepable 输出中省略这些功能,因为缺少
放置它们的地方。

尽管如此,grepable 输出仍然很受欢迎。 这是一个简单的格式,列出
每个主机在一行上,可以用标准的 Unix 进行简单的搜索和解析
grep、awk、cut、sed、diff 和 Perl 等工具。 即使我通常一次性使用它
在命令行中完成的测试。 查找所有打开 SSH 端口的主机
Solaris 只需要一个简单的 grep 来识别主机,通过管道传输到 awk 或
cut 命令打印所需的字段。

Grepable 输出由注释(以井号 (#) 开头的行)组成。 和目标
线。 目标行包括六个标记字段的组合,由制表符分隔
然后是冒号。 这些字段是主机、端口、协议、忽略状态、操作系统、
序列索引、IP ID 和状态。

这些字段中最重要的通常是端口,它提供了每个字段的详细信息
有趣的港口。 它是一个逗号分隔的端口条目列表。 每个端口入口
代表一个有趣的端口,采用七个斜线 (/) 分隔的形式
子字段。 这些子字段是:端口号、状态、协议、所有者、服务、SunRPC
信息和版本信息。

与 XML 输出一样,此手册页不允许记录整个格式。 一个
更详细的查看 Nmap grepable 输出格式可从
https://nmap.org/book/output-formats-grepable-output.html.

-oA 基本名 (输出到所有格式)。
为方便起见,您可以指定 -oA 基本名 以正常的 XML 格式存储扫描结果,
和 grepable 格式。 它们存储在 基本名.nmap, 基本名.xml,和
基本名.gnmap,分别。 与大多数程序一样,您可以在文件名前加上
目录路径,例如 〜/ nmaplogs / foocorp / 在 Unix 上或 c:\hacking\sco 在 Windows 上。

冗长 调试 选项

-v (增加详细程度)。
增加详细级别,导致 Nmap 打印更多有关扫描的信息
进行中。 打开的端口显示为找到时,完成时间估计为
当 Nmap 认为扫描需要几分钟以上时提供。 使用它两次或
更多更详细: -vv,或者直接给出详细级别,例如
-v3..

大多数更改只影响交互式输出,有些还会影响正常和脚本
小子输出。 其他输出类型是由机器处理的,所以 Nmap
默认情况下可以在这些格式中提供大量细节而不会使人感到疲劳
用户。 但是,其他模式有一些变化,可以减少输出大小
基本上省略了一些细节。 例如,grepable 中的注释行
提供所有扫描端口列表的输出仅以详细模式打印
因为它可能很长。

-d (提高调试级别)。
当详细模式不能为您提供足够的数据时,可以进行调试
用更多的东西淹没你! 与详细选项(-v),调试开启
带有命令行标志(-d) 并且可以通过指定来提高调试级别
多次,。 如 -dd,或者直接设置一个级别。 例如, -d9
九级。 那是最高有效级别,将产生数千行
除非您使用很少的端口和目标运行非常简单的扫描。

当 Nmap 中怀疑存在错误时,调试输出很有用,或者如果您只是
对 Nmap 正在做什么以及为什么会感到困惑。 由于此功能主要用于
开发人员,调试行并不总是不言自明。 你可能会得到类似的东西:
超时值:srtt:-1 rttvar:-1 到:1000000 delta 14987 ==> srtt:14987 rttvar:
14987转:100000。如果你看不懂一行,你唯一的办法就是无视
它,在源代码中查找,或向开发列表请求帮助
(nmap-dev).. 一些行是不言自明的,但消息变得更加模糊
调试级别增加。

- 原因 (主机和端口状态原因)。
显示每个端口设置为特定状态的原因以及每个主机启动的原因
或下降。 此选项显示确定端口或主机的数据包类型
状态。 例如,来自关闭端口的 RST 数据包或来自活动端口的回声回复
主持人。 Nmap 可以提供的信息由扫描或 ping 的类型决定。 这
SYN 扫描和 SYN ping (-sS-PS) 很详细,但是 TCP 连接扫描 (-sT)
受执行的限制 联接 系统调用。 这个功能是
由调试选项自动启用 (-d)。 并将结果存储在 XML 日志中
即使未指定此选项,文件也是如此。

--stats-每个 (打印定期计时统计信息)。
在每个间隔后定期打印计时状态消息 . 时间是一个
在称为“时序和性能”的部分中描述的类型的规范; 所以
例如,使用 --stats-每个 10s 每 10 秒获取一次状态更新。 更新
打印到交互式输出(屏幕)和 XML 输出。

--数据包跟踪 (跟踪发送和接收的数据包和数据)。
使 Nmap 打印发送或接收的每个数据包的摘要。 这是经常使用的
用于调试,但也是新用户准确了解什么的一种宝贵方式
Nmap 正在做幕后工作。 为避免打印数千行,您可能需要
指定要扫描的有限数量的端口,例如 - p20-30. 如果你只关心
版本检测子系统的进展,使用 --版本跟踪 反而。 如果你只
关心脚本跟踪,指定 --脚本跟踪。 同 --数据包跟踪,你得到所有
以上。

- 打开 (仅显示开放(或可能开放)的端口)。
有时您只关心可以实际连接的端口(开放的),而不关心
想要结果被关闭、过滤和关闭|过滤的端口弄得乱七八糟。 输出
定制通常在扫描后使用 grep、awk 和 Perl 等工具完成,
但由于大量请求,添加了此功能。 指定 - 打开 只看
至少有一个打开的、打开的|过滤的或未过滤的端口的主机,并且只能看到
那些州。 这三个状态按正常处理方式处理,这意味着
open|filtered 和 unfiltered 可能会被压缩成计数,如果有
他们中的绝大多数。

--iflist (列出接口和路由)。
打印 Nmap 检测到的接口列表和系统路由。 这对
调试路由问题或设备错误特征(例如 Nmap 处理 PPP
作为以太网连接)。

其他 产量 选项

--附加输出 (附加到而不是 clobber 输出文件)。
当您为输出格式标志指定文件名时,例如 -牛 or -在,那个文件是
默认覆盖。 如果您希望保留文件的现有内容并且
追加新结果,指定 --附加输出 选项。 所有输出文件名
在该 Nmap 执行中指定的内容将被附加到而不是被破坏。 这
不适用于 XML (-牛) 扫描数据作为结果文件通常不会解析
直到你用手把它修好。

- 恢复 文件名 (恢复中止的扫描)。
一些广泛的 Nmap 运行需要很长时间——大约几天。 此类扫描不
总是运行到完成。 限制可能会阻止 Nmap 在工作期间运行
小时,网络可能会中断,运行 Nmap 的机器可能会遭受
计划内或计划外重启,或者 Nmap 本身可能崩溃。 管理员运行
Nmap 也可以出于任何其他原因取消它,按 ctrl-C。 重新启动
从一开始的整个扫描可能是不可取的。 幸运的是,如果正常(-在),或
可查询的(-oG) 日志被保留,用户可以要求 Nmap 恢复扫描
执行停止时它正在处理的目标。 只需指定 - 恢复 选项和
将普通/grepable 输出文件作为其参数传递。 没有其他论点
允许,因为 Nmap 解析输出文件以使用之前指定的相同文件。
只需将 Nmap 称为 NMAP - 恢复 日志文件名. Nmap 会将新结果附加到
上次执行中指定的数据文件。 恢复不支持 XML
输出格式,因为将两次运行合并为一个有效的 XML 文件将是
难。

--样式表 or 网址 (设置 XSL 样式表以转换 XML 输出)。
Nmap 附带一个 XSL。 样式表。 命名为 nmap.xsl。 用于查看或翻译 XML
输出到 HTML.. XML 输出包括一个 xml-stylesheet 指令,它指向
nmap.xml 最初由 Nmap 安装的位置。 通过 XSLT 运行 XML 文件
处理器,如 xslt过程[17]。 生成一个 HTML 文件。 直接打开XML
浏览器中的文件不再正常工作,因为现代浏览器限制了位置
样式表可以从中加载。 如果您希望使用不同的样式表,请指定它
作为论据 --样式表. 您必须传递完整的路径名或 URL。 一种常见的
调用是 --样式表 https://nmap.org/svn/docs/nmap.xsl. 这告诉 XSLT
处理器从 Nmap.Org 加载最新版本的样式表。 这 --webxml
option 用更少的打字和记忆做同样的事情。 加载 XSL
Nmap.Org 可以更轻松地在没有 Nmap 的机器上查看结果(因此
nmap.xsl) 安装。 所以 URL 通常更有用,但本地文件系统
出于隐私原因,默认使用 nmap.xsl 的位置。

--webxml (从 Nmap.Org 加载样式表)。
这是一个方便的选项,只不过是一个别名 --样式表
https://nmap.org/svn/docs/nmap.xsl.

--无样式表 (省略 XML 中的 XSL 样式表声明)。
指定此选项可防止 Nmap 将任何 XSL 样式表与其 XML 相关联
输出。 xml-stylesheet 指令被省略。

其他条款 配置


本节描述了一些不太适合的重要(和不那么重要)的选项
其他任何地方。

-6 (启用 IPv6 扫描)。
Nmap 为其最流行的功能提供 IPv6 支持。 Ping扫描,端口扫描,
版本检测,Nmap Scripting Engine 都支持 IPv6。 命令语法
与往常一样,只是您还添加了 -6 选项。 当然,你必须使用
如果您指定地址而不是主机名,则为 IPv6 语法。 地址可能看起来
像 3ff​​e:7501:4819:2000:210:f3ff:fe03:14d0,所以推荐使用主机名。 输出
看起来和往常一样,“有趣的端口”行上的 IPv6 地址是
唯一的 IPv6 赠品。

虽然 IPv6 还没有完全席卷全球,但它在某些领域得到了重要的使用
(通常是亚洲)国家和大多数现代操作系统都支持它。 使用 Nmap
对于 IPv6,扫描的源和目标都必须针对 IPv6 进行配置。 如果
您的 ISP(像大多数人一样)没有为您分配 IPv6 地址,免费隧道
代理广泛可用,并且可以与 Nmap 一起正常工作。 我使用免费的 IPv6 隧道
经纪人。 服务于 http://www.tunnelbroker.net. 其他隧道经纪人是 上市 at
维基百科上的数据[18]。 6to4 隧道是另一种流行的免费方法。

在 Windows 上,原始套接字 IPv6 扫描仅在以太网设备上受支持(不支持
隧道),并且仅在 Windows Vista 上。 然后。 使用 --非特权. 选项在
其他情况。

-A (积极扫描选项)。
此选项启用其他高级和激进的选项。 目前,这使
操作系统检测 (-O), 版本扫描 (-sV), 脚本扫描 (-SC) 和跟踪路由
(--跟踪路由).. 将来可能会添加更多功能。 关键是要启用一个
全面的扫描选项集,无需人们记住大量的
标志。 但是,由于使用默认设置的脚本扫描被认为是侵入性的,
你不应该使用 -A 未经许可针对目标网络。 仅此选项
启用功能,而不是计时选项(例如 -T4) 或详细程度选项 (-v那个
你可能也想要。 需要特权(例如 root 访问)的选项,例如操作系统
仅当这些权限可用时才会启用检测和跟踪路由。

--数据目录 目录名 (指定自定义 Nmap 数据文件位置)。
Nmap 在运行时在名为 nmap-service-probes 的文件中获取一些特殊数据,
nmap-services、nmap-protocols、nmap-rpc、nmap-mac-prefixes 和 nmap-os-db。 如果
已指定任何这些文件的位置(使用 --服务数据库 or
--版本数据库 选项),该位置用于该文件。 之后,Nmap 搜索
指定目录中的这些文件 --数据目录 选项(如果有)。 任何文件
没有找到,在指定的目录中搜索 NMAP目录.
环境变量。 接下来来了 〜/ .nmap。 获取真实有效的 UID; 或在 Windows 上,
主页\AppData\Roaming\nmap(其中 主页 是用户的主目录,例如
C:\用户\用户)。 接下来是 nmap 可执行文件的位置和相同的
附加 ../share/nmap 的位置。 然后是编译位置,例如
/usr/local/share/nmap 或 /usr/share/nmap。

--服务数据库 服务 文件 (指定自定义服务文件)。
要求 Nmap 使用指定的服务文件而不是 nmap-services 数据文件
Nmap 自带的。 使用此选项还会导致快速扫描 (-F) 要使用的。 看
的描述 --数据目录 有关 Nmap 数据文件的更多信息。

--版本数据库 服务 探头 文件 (指定自定义服务探测文件)。
要求 Nmap 使用指定的服务探测文件而不是 nmap-service-probes
Nmap 自带的数据文件。 请参阅说明 --数据目录 了解更多信息
在 Nmap 的数据文件上。

--发送eth (使用原始以太网发送)。
要求 Nmap 在原始以太网(数据链路)层而不是更高层发送数据包
IP(网络)层。 默认情况下,Nmap 选择通常最适合
它运行的平台。 原始套接字(IP 层)。 通常是最有效的
Unix 机器,而 Windows 操作需要以太网帧,因为
Microsoft 禁用了原始套接字支持。 Nmap 仍然在 Unix 上使用原始 IP 数据包,尽管
当没有其他选择(例如非以太网连接)时,此选项。

--发送IP (在原始 IP 级别发送)。
要求 Nmap 通过原始 IP 套接字发送数据包,而不是发送较低级别的以太网
帧。 它是对 --发送eth 前面讨论过的选项。

- 特权 (假设用户具有完全特权)。
告诉 Nmap 简单地假设它有足够的特权来执行原始套接字发送,
数据包嗅探,以及通常需要 root 权限的类似操作。 在 Unix 上
系统。 默认情况下,如果请求此类操作,Nmap 会退出,但 盖特伊德 是不是
零。 - 特权 对 Linux 内核功能和类似系统很有用
可以配置为允许非特权用户执行原始数据包扫描。 务必
在需要特权的选项的任何标志之前提供此选项标志(SYN
扫描、操作系统检测等)。 这 NMAP_特权. 环境变量可以设置为
等效替代 - 特权.

--非特权 (假设用户没有原始套接字权限)。
此选项与 - 特权. 它告诉 Nmap 将用户视为
缺乏网络原始套接字和嗅探权限。 这对测试很有用,
调试,或者当您的操作系统的原始网络功能以某种方式
破碎的。 这 NMAP_UNPRIVILEGED. 环境变量可以设置为等效
替代 --非特权.

--释放内存 (退出前释放内存)。
此选项仅对内存泄漏调试有用。 它导致 Nmap 释放
在它退出之前分配内存,以便更容易发现实际的内存泄漏。
通常 Nmap 会跳过这个,因为操作系统会在进程终止时这样做。

-V; - 版 (打印版本号)。
打印 Nmap 版本号并退出。

-h; - 帮帮我 (打印帮助摘要页)。
打印带有最常见命令标志的简短帮助屏幕。 不运行 Nmap
任何论点都做同样的事情。

运行 相互作用


在 Nmap 的执行过程中,所有的按键都被捕获。 这使您可以交互
与程序没有中止和重新启动它。 某些特殊键会改变
选项,而任何其他键都会打印出一条状态消息,告诉您有关扫描的信息。
约定是这样的 小写 信件 提高 印刷量,以及 大写
信件 减少 印刷。 你也可以按'?' 求助。

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

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

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

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

还要别的吗
打印出这样的状态消息:

统计:0:00:07 过去; 20 台主机完成(1 台向上),1 台正在进行服务扫描
服务扫描时间:完成约 33.33%; ETC:20:57(剩余时间为 0:00:12)

示例


下面是一些 Nmap 的使用示例,从简单常规到稍微复杂一点
和深奥的。 一些实际的IP地址和域名被用来做更多的事情
具体的。 在他们的位置,您应该替换地址/名称 您的 网络.
虽然我不认为端口扫描其他网络是或应该是非法的,但某些网络
管理员不喜欢主动扫描他们的网络,可能会抱怨。
首先获得许可是最好的方法。

出于测试目的,您有权扫描主机 scanme.nmap.org.. 这
权限仅包括通过 Nmap 进行扫描,不包括测试漏洞或拒绝服务
攻击。 为了节省带宽,请不要启动超过十二次扫描
该主机每天。 如果这个免费的扫描目标服务被滥用,将会被下架
Nmap 将报告 Failed to resolve given hostname/IP: scanme.nmap.org。 这些
权限也适用于主机 scanme2.nmap.org、scanme3.nmap.org 等,不过
这些主机当前不存在。

NMAP -v scanme.nmap.org网站.

此选项扫描机器 scanme.nmap.org 上所有保留的 TCP 端口。 这 -v 选项
启用详细模式。

NMAP -sS -O scanme.nmap.org/24.

对主机上 256 个 IP 之外的每台机器启动隐形 SYN 扫描
Scanme 所在的 C 类大小的网络。 它还试图确定哪些操作
系统正在运行的每台主机上运行。 这需要root权限
因为 SYN 扫描和操作系统检测。

NMAP -sV -p 22,53,110,143,4564 198.116.0-255.1-127.

在 255 个可能的每一个的前半部分启动主机枚举和 TCP 扫描
198.116 B 类地址空间中的 XNUMX 位子网。 这测试系统是否运行
标准端口上的 SSH、DNS、POP3 或 IMAP,或端口 4564 上的任何内容。对于任何
发现这些端口打开,版本检测用于确定是什么应用程序
运行。

NMAP -v -iR 100000 P -p 80.

要求 Nmap 随机选择 100,000 台主机并扫描它们以查找 Web 服务器(端口 80)。 主持人
枚举被禁用 P 因为首先发送了几个探针来确定是否
无论如何,当您只探测每个目标主机上的一个端口时,主机已启动是一种浪费。

NMAP P -p80 -牛 日志/pb-port80scan.xml -oG 日志/pb-port80scan.gnmap 216.163.128.20/20.

这会扫描 4096 个 IP 以查找任何 Web 服务器(无需 ping 它们)并将输出保存在
grepable 和 XML 格式。

网络地图 立即预订


虽然本参考指南详细介绍了所有材质 Nmap 选项,但它不能完全演示
如何应用这些功能来快速解决现实世界的任务。 为此,我们发布了 Nmap
网络扫描:网络发现和安全的官方 Nmap 项目指南
扫描。 主题包括颠覆防火墙和入侵检测系统,优化
Nmap 性能,以及使用 Nmap 脚本引擎自动执行常见网络任务。
为常见的 Nmap 任务提供了提示和说明,例如获取网络
库存、渗透测试、检测流氓无线接入点和撤销
网络蠕虫爆发。 示例和图表显示了线路上的实际通信。 更多的
这本书的一半以上可以在线免费获得。 看 https://nmap.org/book 更多
信息。

使用 onworks.net 服务在线使用 nmap


免费服务器和工作站

下载 Windows 和 Linux 应用程序

Linux 命令

Ad




×
广告
❤️在这里购物、预订或购买——免费,有助于保持服务免费。