最近,我在 tcpdump 和 wireshark 的帮助下学习了有关 nmap 扫描器的详细信息。为了找到 nmap 上的底层行为,我指定了一个虚拟端口 9527 和一个命令行,如“nmap -p9527 -P* target_ip”。
因此我注意到以 -P* 开头的选项的所有详细信息结果都用于检查目标主机的可用性,使用各种协议,例如 ICMP、TCP、UDP。
我想确认我的想法:使用 -P 选项来查找活动主机相当于 Nmap 的 ping 扫描。
答案1
来自Nmap 书:
默认情况下,Nmap 会进行主机发现,然后对其确定在线的每个主机执行端口扫描。
Nmap 的工作分为两个阶段:“探测”阶段(有时容易混淆地称为“ping”阶段)和“扫描”阶段。这两个阶段大致对应于 -P 和 -s 类选项。
这个想法是,您想要扫描一组 IP 地址(例如,一个大型子网)中机器上的一些(可能很大的)TCP 和/或 UDP 端口列表,但您事先不知道该子网中的哪些 IP 地址处于正常运行状态。由于向未连接到任何设备的 IP 地址发送大量扫描需要很长时间,因此 nmap 在探测阶段会向您指定的每个 IP 发送少量特定类型的数据包。然后,在扫描阶段,只扫描收到回复的 IP 地址。
令人困惑的是,有些 -s 选项实际上指定了探测阶段的内容。我认为你想到的是-sn
(“不扫描”是我记得的),这意味着“完全跳过扫描阶段,只报告哪些主机处于启动状态”。由于nmap 书说:
此选项告诉 Nmap 在主机发现后不要进行端口扫描,而只打印出响应主机发现探测的可用主机。这通常称为“ping 扫描”... 在以前的 Nmap 版本中,-sn 被称为 -sP。
我推测这就是你所说的“ping 扫描”,因为 nmap 手册是这样引用它的,而旧-sP
选项确实适合“扫描 Ping”助记符。现在“ping”是一个常用命令行程序的实际名称,用于查看给定计算机是否在网络上。ping 程序通过向相关主机发送 ICMP Echo 数据包来工作,并查看相关主机是否响应。没有“端口”来发送 ICMP Echo 请求,因为与它的兄弟 TCP 和 UDP 不同,ICMP 协议没有端口的概念,只有不同类型的请求。
ICMP 指定了几种类型的请求,nmap 可以使用它们来确定主机是否启动。-PE 发送实际的 ICMP Echo 请求,这是命令ping
发送的内容。它还可以在探测阶段发送 ICMP 时间戳 (-PP) 和 ICMP 地址掩码 (-PM) 数据包。
答案2
-P
nmap 的选项指定了应使用哪些“ping”方法来查看主机是否启动。这些选项-s
指定了 nmap 应该如何处理这些信息:简单地构建一个响应的地址列表 ( -sP
),或者扫描这些地址以获取更多信息 ( -sS
, -sT
, -sA
, -sM
, -sW
, -sU
, -sN
, -sX
, -sF
, -sI
, -sO
)。