我和我们小组的一名博士生聊天,他告诉我 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
但我猜在这种情况下它是打开的。
目前,我有以下问题:
- 通常,不同的接口有不同的端口,这意味着如果 NIC A 和 NIC B 都打开了端口 C,那么 A 的 C 和 B 的端口就是不同的。但从输出中我们可以看到,Windows 还提供了所有 NIC 共享的端口。这些端口是否永久可供所有 NIC 使用?或者如果某个套接字用于某些服务,则该端口专门用于该 NIC。
- 对于开放的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 作为本地端口,但通过任何其他套接字发送的端口都需要使用不同的本地端口。