用 -Pn 扫描就可以了,不包括任何 ICMP 数据包,但是另一个扫描,为什么当我明确说只检查 9000 时它试图检查 120、443 和 80 端口?
首先,您提供的输出中没有检查 120 端口(TCP 或 UDP),因此我不会对此提供任何答案。此外,我假设您显示的捕获仅捕获一个方向(而不是两个方向)的流量,因为只有在存在看不见的响应流量(并且您指示 Nmap 显示 TCP/9000 打开)时,当前的内容才有意义。
至于剩下的事情,你做两次扫描。
您执行的第一次扫描会nmap -p 9000 -Pn myIP导致 NMAP 主机发送两个数据包,一个 TCP SYN 和一个 TCP RST。很明显,您只捕获了一个方向的流量,但扫描完成后显示端口 9000 打开。
这使您捕获的七个数据包从第二次扫描中得到解决。在您的第二次扫描中,您所做的nmap -p 9000 myIP只是通过省略-Pn. 那么这个标志有什么变化呢?如果您查看nmap.org 上的文档,该-Pn选项会禁用主机发现并对每个指定的主机运行端口扫描。
如果没有指定其他发现技术,在文档中深入挖掘一下,您会发现默认主机发现过程的以下描述:
如果没有选择这些主机发现技术,Nmap 将使用一个默认值,它相当于 Windows 或特权(root)Unix 用户的 -PE -PS443 -PA80 -PP 参数。细心的读者都知道,这意味着向每台机器发送一个ICMP echo请求、一个TCP SYN数据包、一个TCP ACK数据包和一个ICMP时间戳请求。
现在,在您捕获的最后七个数据包中,前四个是 ICMP 回显 (-PE)、TCP SYN 到 TCP/443 (-PS443)、TCP ACK 到 TCP/80 (-PA80) 和 ICMP 时间戳请求(-PP)。这与 Nmap 文档中为主机发现描述的默认操作相匹配。
最后三个数据包是 TCP/443 的先前 SYN 连接的 TCP RST,然后由于主机发现过程发现目标在线,端口扫描 TCP/9000 的 SYN 和 RST。
如果您的 tcpdump 过滤器在两个方向捕获流量,您也会看到响应流量。
编辑新问题(请在以后提出新问题作为新问题)
我想尝试更好地理解 -Pn 标志和 Discovery Host 的使用 - 在更多测试中只有一个标志 PS443。但给出了意想不到的结果。
我认为这是预期的结果。
主机我可以确保它是开放的。使用 tcpdump 我只从我的 IP 到 IPscan 检索 1 个数据包地址,并带有“IP 日期 myIP> IPScan: Flags [s]”。也就是说,带有 SYN 标志的 TCP 数据包处于活动状态。然后因为它让我觉得如果扫描中没有 ping 探针,ping 探针可以阻止扫描,对吧?PS 只是激活 SYN 标志..
因此,您运行的第一个命令nmap -T2 -sS -PS443 -p 443 <host>表明主机已关闭并且不执行端口扫描。
您的第二个命令包含答案nmap -T2 -sS -Pn -PS443 -p 443 <host>。这里唯一的区别是您添加了-Pn标志,它完全禁用主机发现并假设所有目标主机都已启动。当它运行端口扫描时,它会显示“443/tcp 过滤”作为响应。
所以你的第一个命令,你明确地告诉 Nmap 只对 TCP/443 进行 TCP SYN 扫描以发现主机。由于第二个命令向我们显示 TCP/443 未打开,因此第一个命令尝试这种发现方法,当它没有收到预期的响应时,主机发现将主机标记为关闭。
正如我在评论中指出的那样,该-Pn标志最初是在 ICMP 是主机发现机制时添加的。随着 ICMP 越来越多地被过滤(虽然这在技术上违反了 ICMP RFC,但它通常被认为是最佳实践),添加了其他主机发现机制。的功能-Pn被调整为包括任何形式的主机发现,而不仅仅是 ICMP。
虽然重复引用了 ICMP 或 ping 与 相关联-Pn,但我之前引用的文档对有以下描述-Pn:
另一种选择是完全跳过 Nmap 发现阶段。通常,Nmap 使用此阶段来确定活动机器以进行更重的扫描。默认情况下,Nmap 仅对发现已启动的主机执行大量探测,例如端口扫描、版本检测或操作系统检测。使用 -Pn 选项禁用主机发现会导致 Nmap 针对指定的每个目标 IP 地址尝试请求的扫描功能。