netstat 是否显示开放的临时端口?

netstat 是否显示开放的临时端口?

我和我们小组的一名博士生聊天,他告诉我 Windows 有 2,500 个开放的 UDP 端口。

因此,如果在 2500 个开放的 UDP 端口中使用了某个临时端口,那么攻击者就很难知道使用了哪个端口,因为它们都是开放的。

我之前从未听说过这个,所以我在自己的环境中进行了一些检查,发现了这一点:


C:\Users\Administrator>netstat -ab

Active Connections

 TCP    [fe80::fc9b:3f4b:206e:b05%9]:49689  WIN-Test:epmap         TIME_WAIT
  TCP    [fe80::fc9b:3f4b:206e:b05%9]:49690  WIN-Test:49667         ESTABLISHED
 [lsass.exe]
  TCP    [fe80::fc9b:3f4b:206e:b05%9]:49691  WIN-Test:ldap          ESTABLISHED
 [dns.exe]
  TCP    [fe80::fc9b:3f4b:206e:b05%9]:49695  WIN-Test:epmap         ESTABLISHED
 [lsass.exe]
  TCP    [fe80::fc9b:3f4b:206e:b05%9]:49696  WIN-Test:49667         ESTABLISHED
 [lsass.exe]
  UDP    0.0.0.0:123            *:*
  W32Time
 [svchost.exe]
  UDP    0.0.0.0:389            *:*
 [lsass.exe]
  UDP    0.0.0.0:500            *:*
  IKEEXT
 [svchost.exe]
  UDP    0.0.0.0:4500           *:*
  IKEEXT
 [svchost.exe]
  UDP    0.0.0.0:5353           *:*
  Dnscache
 [svchost.exe]
  UDP    0.0.0.0:5355           *:*
  Dnscache
 [svchost.exe]
  UDP    0.0.0.0:50271          *:*
 [dns.exe]
  UDP    0.0.0.0:50272          *:*
 [dns.exe]
  UDP    0.0.0.0:50273          *:*
 [dns.exe]
  UDP    0.0.0.0:50274          *:*
 [dns.exe]
  UDP    0.0.0.0:50275          *:*
 [dns.exe]
  UDP    0.0.0.0:50276          *:*
 [dns.exe]
  UDP    0.0.0.0:50277          *:*
 [dns.exe]
  UDP    0.0.0.0:50278          *:*
 [dns.exe]
  UDP    0.0.0.0:50279          *:*
 [dns.exe]
  UDP    0.0.0.0:50280          *:*
 [dns.exe]
  UDP    0.0.0.0:50281          *:*
 [dns.exe]
  UDP    0.0.0.0:50282          *:*
 [dns.exe]
  UDP    0.0.0.0:50283          *:*
 [dns.exe]
  UDP    0.0.0.0:50284          *:*
 [dns.exe]
  UDP    0.0.0.0:50285          *:*
 [dns.exe]
  UDP    0.0.0.0:50286          *:*
 [dns.exe]
  UDP    0.0.0.0:50287          *:*
 [dns.exe]
  UDP    0.0.0.0:50288          *:*
 [dns.exe]
  UDP    0.0.0.0:50289          *:*
 [dns.exe]
  UDP    0.0.0.0:50290          *:*
 [dns.exe]
  UDP    0.0.0.0:50291          *:*
 [dns.exe]
  UDP    0.0.0.0:50292          *:*
 [dns.exe]
  UDP    0.0.0.0:50293          *:*
 [dns.exe]
  UDP    0.0.0.0:50294          *:*
 [dns.exe]
  UDP    0.0.0.0:50295          *:*
 [dns.exe]
  UDP    0.0.0.0:50296          *:*
 [dns.exe]
  UDP    0.0.0.0:50297          *:*
 [dns.exe]
  UDP    0.0.0.0:50298          *:*
 [dns.exe]
  UDP    0.0.0.0:50299          *:*
 [dns.exe]
  UDP    0.0.0.0:50300          *:*
 [dns.exe]
  UDP    0.0.0.0:50301          *:*
 [dns.exe]
  UDP    0.0.0.0:50302          *:*
 [dns.exe]
  UDP    0.0.0.0:50303          *:*
 [dns.exe]
  UDP    0.0.0.0:50304          *:*
 [dns.exe]
  UDP    0.0.0.0:50305          *:*
 [dns.exe]
  UDP    0.0.0.0:50306          *:*
 [dns.exe]
  UDP    0.0.0.0:50307          *:*
 [dns.exe]
  UDP    0.0.0.0:50308          *:*
 [dns.exe]
  UDP    0.0.0.0:50309          *:*
 [dns.exe]
  UDP    0.0.0.0:50310          *:*
 [dns.exe]
  UDP    0.0.0.0:50311          *:*
 [dns.exe]

这只是我的终端显示的一部分。总量大约是2k。

From spec0.0.0.0表示端口正在监听所有接口。第一个*in*:*表示连接可以来自任何 IP 地址,第二个*in*:*表示连接可以来自远程计算机上的任何端口。因此,它是一个等待连接的套接字。但是,它没有,LISTENING但我猜在这种情况下它是打开的。

目前,我有以下问题:

  1. 通常,不同的接口有不同的端口,这意味着如果 NIC A 和 NIC B 都打开了端口 C,那么 A 的 C 和 B 的端口就是不同的。但从输出中我们可以看到,Windows 还提供了所有 NIC 共享的端口。这些端口是否永久可供所有 NIC 使用?或者如果某个套接字用于某些服务,则该端口专门用于该 NIC。
  2. 对于开放的2500个udp端口,如果服务器发出UDP数据包,系统是否只使用其中一个作为临时端口?

我稍后会自己做一些检查,但我也想听听一些与之相关的要点。

终端中显示的这些端口似乎没有打开

 [dns.exe]
  UDP    0.0.0.0:53161          *:*
 [dns.exe]
  UDP    0.0.0.0:53162          *:*
 [dns.exe]
  UDP    0.0.0.0:53163          *:*
 [dns.exe]

我向 53162 发送了一个 UDP 数据包,Windows 返回了一个 UDP 数据包,ICMP 端口不可达

基于丹尼尔的评论,看来端口是因为而打开的dns.exe。所以我向 Windows 发送了 DNS 查询,但也得到了 ICMP 端口不可达的结果。但是,A 记录是在 ICMP 之前发送的。

答案1

昨天,我和小组里的一个博士生聊天,他告诉我,windows 有 2500 个开放的 udp 端口​​。因此,如果在 2500 个开放的 udp 端口​​中使用了某个临时端口

目前还不清楚该学生所说的“开放”是什么意思,或者他们有什么资料支持这一说法。

最常见的情况是,“端口打开”意味着程序已绑定套接字,并且正在等待接收该端口上的数据包(这将显示在 netstat 中)–因此它是无法使用作为临时端口,即使它通常在范围内。

但是从 netstat 输出中可以看出,具有“开放”端口的套接字远远少于 2500 个(其中只有 6 个真正在监听请求,其他的是发出请求并正在等待 DNS 单个响应的临时套接字),所以这不太可能是你的学生的意思。

学生可能一直在谈论临时端口(不会显示在 netstat 中)——然而,2500 也不是临时端口的正确数量;端口范围恰好有记录这里这里

操作系统版本 端口范围 端口数
Windows Vista 及更高版本 49152 – 65535 16384
最高至 Windows XP 1025 – 5000 3976

因此,这是一个等待连接的套接字。但是,它没有 LISTENING,但我猜在这种情况下它是打开的。

没有可显示的协议状态,因为 UDP 没有任何协议状态(与具有实际状态机的 TCP 不同)。

虽然 UDP 套接字可以绑定到远程地址:端口,但这是一个本地操作,不会改变协议的行为方式;它始终处于相同的状态。

但是,如果这些是具有状态的 TCP 套接字,则其中大约 5-6 个将处于“LISTENING”状态,而其余的(所有 dns.exe 套接字)很可能是“ESTABLISHED”,因为它们来自出站查询。

通常不同的接口有不同的端口,这意味着如果 NIC A 和 NIC B 都打开了端口 C,那么 A 的 C 和 B 的 C 就是不同的东西。

TCP/UDP 端口不是与接口相关联,但具有本地 IP 地址。根据网络路由,发往 B 地址的数据包实际上可能通过接口 A 到达,但它仍将与绑定到 B 地址的套接字匹配。另一方面,接口可能有多个 IP 地址 - 如果套接字绑定到地址 B1,它将不会接受发送到地址 B2 的数据包,即使它是发往“相同”端口的数据包。

因此,如果 netstat 显示套接字已绑定到10.0.0.5:22,则它实际上意味着它与本地地址 10.0.0.5 相关联,而不管它在哪个接口上配置。

但是从输出中我们可以看到,Windows 还提供了所有 NIC 共享的端口。这些端口是否永久可供所有 NIC 使用?或者如果某个套接字用于某些服务,则该端口专门用于该 NIC。

0.0.0.0 场比赛全部随时的 IPv4 本地地址,包括将来可能添加的地址。

对于开放的2500个udp端口,如果服务器发出UDP数据包,系统是否只使用其中一个作为临时端口?

netstat 不会显示“可用”临时端口池 - 恰恰相反,它只显示与特定套接字关联的端口。例如,列出本地端口 50311 是因为它当前正由该特定套接字使用(因此从临时端口池中删除)。

因此,dns.exe 通过该套接字发送的数据包将使用 50311 作为本地端口,但通过任何其他套接字发送的端口都需要使用不同的本地端口。

相关内容