我使用 nmap 映射网络,并使用以下命令进行扫描
nmap -v -sS --no-stylesheet -T3 -sU -sV -O -oX <filename.xml> 192.168.69.0/24
某些主机返回了奇怪的结果。Nmap 认为它们处于启动状态,原因是syn-ack
。我假设这意味着已与某个端口建立了 TCP 连接,并且已完成三次握手过程。但是,没有列出打开的端口。(但是有打开|过滤、过滤和关闭的端口)。有人能解释一下我应该如何解释这一点吗?与主机协商 TCP 连接是否不意味着必须至少有一个端口打开?
扫描后该主机的 XML 输出如下:
<host starttime="1435615239" endtime="1435901758">
<status state="up" reason="syn-ack" reason_ttl="115"/>
<address addr="192.168.69.23" addrtype="ipv4"/>
<hostnames>
<hostname name="example.com" type="PTR"/>
</hostnames>
<ports>
<extraports state="open|filtered" count="1000">
<extrareasons reason="no-responses" count="1000"/>
</extraports>
<extraports state="filtered" count="996">
<extrareasons reason="no-responses" count="996"/>
</extraports>
<port protocol="tcp" portid="111">
<state state="closed" reason="reset" reason_ttl="115"/>
<service name="rpcbind" method="table" conf="3"/>
</port>
<!-- more closed ports -->
</ports>
<os><!-- ... --></os>
<times srtt="3165" rttvar="109" to="100000"/>
</host>
答案1
Nmap 认为它们已启动,这是由于 syn-ack。我猜想这意味着已与某个端口建立了 tcp 连接,并且 3 次握手过程已完成。
实际上,Nmap 不会完成主机发现的三次握手(也不会完成 TCP SYN 扫描-sS
)。它向端口 443 发送原始 TCP SYN 数据包(在其他调查中),如果主机收到任何不同的响应,则认为主机已启动。在您的例子中,目标发送了一个 SYN-ACK 响应,表示端口开放。然后,Nmap 让扫描主机的操作系统发送 RST 数据包作为回复,因为操作系统不知道传出的 SYN,也不期待 SYN-ACK 回复。如果您将防火墙配置为丢弃无效或意外的数据包,则永远不会发送 RST。
某些 TCP 堆栈(尤其是嵌入式设备上的堆栈)不能很好地处理 TCP 异常。您的目标可能在端口 443 上处于半开 TCP 连接状态,等待永远不会到达的 RST 或 ACK 数据包,这将导致在端口扫描阶段得不到回应。
不过,这全都是猜测。目标很可能有某种自适应主机防火墙,可以检测到端口扫描,并在 Nmap 流量到达开放端口 443 之前开始丢弃它。