我们的自定义 Windows 应用程序监听端口 5000。常规重启后,我们的应用程序无法再监听端口 5000,因为作为 Windows 服务运行的 lsass.exe(本地安全身份验证服务器)已开始监听端口 5000。有没有办法指示 lsass.exe 不要使用端口 5000?还有其他选择吗?
答案1
您唯一的机会是禁用服务器上的 SSDP 服务。请注意,如果您这样做,您将失去 UPnP 等功能。
否则,您唯一的其他选择是重新配置您的应用程序以使用另一个端口。
答案2
您可以通过命令更改 Windows 应用程序使用的动态端口范围:
netsh int ipv4 set dynamicport tcp start=<start_port> num=<ports_count>
答案3
您的系统的默认端口范围很可能已从标准的 49152-65535 更改为更大的 1025-65535。有时在安装某些应用程序(例如 Microsoft Exchange 或 SQL Server)时会发生这种情况。
我也遇到了这个问题。在某些系统上,lsass、wininit、spoolsv 等在高端口 (49152-65535) 上运行,但在其他系统上,它们似乎在低端口 1024-5000 上运行。我不确定系统为什么选择哪个池,但似乎 Microsoft 已记录了此行为:
重要提示本文包含对默认动态端口范围的多次引用。在 Windows Server 2008 及更高版本以及 Windows Vista 及更高版本中,默认动态端口范围更改为以下范围:
Start port: 49152 End port: 65535
Windows 2000、Windows XP 和 Windows Server 2003 使用以下动态端口范围:
Start port: 1025 End port: 5000
这对您来说意味着:
If your computer network environment uses only Windows Server 2012, Windows Server 2008 R2, Windows Server 2008, Windows 8, Windows 7, or Windows Vista, you must enable connectivity over the high port range of 49152 through 65535. If your computer network environment uses Windows Server 2012, Windows Server 2008 R2, Windows Server 2008, Windows 8, Windows 7, or Windows Vista together with versions of Windows earlier than Windows Server 2008 and Windows Vista, you must enable connectivity over both the following port ranges: High port range 49152 through 65535 Low port range 1025 through 5000 If your computer network environment uses only versions of Windows earlier than Windows Server 2008 and Windows Vista, you must enable connectivity over the low port range of 1025 through 5000.
有关 Windows Server 2012、Windows 8、Windows Server 2008 R2、Windows 7、Windows Server 2008 和 Windows Vista 中默认动态端口范围的详细信息,请单击以下文章编号,以转到 Microsoft 知识库中的文章:929851 Windows Vista 和 Windows Server 2008 中的 TCP/IP 默认动态端口范围已更改
在最后一个链接中还有另一个小消息:
注意:在基于 Windows Server 2008 的计算机上安装 Microsoft Exchange Server 2007 时,默认端口范围是 1025 到 60000。
对我来说,这似乎与 SQL 服务器有关。我猜想,在装有某些企业级软件(Exchange、SQL 等)的系统中,默认端口范围会从标准的 49152-65535 增加到更大的范围(1025-60000?)
通过运行建议的命令可以实现这一点
netsh int ipv4 show dynamicport tcp netsh int ipv4 show dynamicport udp netsh int ipv6 show dynamicport tcp netsh int ipv6 show dynamicport udp
我在使用低端口的系统上得到“起始端口 1025,端口数 64510”,在常规系统上得到“起始端口 49152,端口数 16384”。
他们发出命令来更改端口,但我不知道当某个特殊应用程序正在运行时将其改回来是否会产生后果:
netsh int ipv4 set dynamicport tcp start=49152 num=16384 netsh int ipv4 set dynamicport udp start=49152 num=16384 netsh int ipv6 set dynamicport tcp start=49152 num=16384 netsh int ipv6 set dynamicport udp start=49152 num=16384