我有几个问题nmap
。首先,nmap
可以通过以下方式检测服务器:
- 链路层
- 网络层
- 传输层
有什么区别(不是在层上,而是在nmap
执行方式上)以及如何nmap
做到这一点?
其次,当我使用 进行端口扫描时nmap
,UDP 扫描比 TCP 扫描花费的时间要长得多。为什么?
第三:是否有任何不同的方法来探索操作系统然后使用命令-O --osscan-guess
(我的意思是完全不同,而不是e)?
答案1
答案2
我假设你不想研究源代码,因为它太复杂了。有一本书以简单的方式描述了 nmap 的工作原理以及它的扫描技术之间的区别,它是网络制图的秘密:nmap 综合指南(免费在线提供)。如需更多文档,请检查nmap.org 上的文档
答案3
您的问题的简短回答如下。长答案是,“阅读联机帮助页” 真正长的答案是,查看源代码。
主机发现(“检测服务器”)
对于与扫描器位于同一链路上的主机,Nmap 使用 ARP 请求来确定正在扫描的每个 IP 地址的链路层地址。任何肯定的答复都意味着主机已启动。该
--send-ip
选项可用于覆盖此行为。对于所有其他主机,Nmap 使用 ICMP 和 TCP 数据包的组合来尝试请求响应。这可以被描述为“网络层”甚至“传输层”发现。简而言之,ICMP Echo 请求应生成 Echo 响应,TCP SYN 应生成 TCP SYN-ACK 或 RST,TCP ACK 应生成 TCP RST,ICMP 时间戳请求应生成时间戳响应。
UDP 扫描需要更长的时间,因为开放端口不必返回回复。对于每个未受防火墙(过滤)的端口,TCP 扫描可以期待立即回复,无论是打开还是关闭。 UDP 扫描对于开放端口和过滤端口获得相同的回复(有一些例外。请参阅有关的文档UDP 有效负载)。此外,许多主机对关闭端口响应(ICMP端口不可达响应)进行速率限制,因此即使是关闭端口也只能缓慢确定。
目标系统上运行的某些服务可能会泄露操作系统,因此运行服务版本扫描 (
-sV
) 可以提供该信息。此外,许多NSE脚本Nmap自带的也能得到类似的信息。然而,这些方法通常不如使用 可靠-O
,并且依赖于可用的特定服务。