Windows 端口被谁占用:监听进程与远程连通排查
本文适用于 Windows Server 2022、2025。端口排查有两个常见起点:应用提示地址被占用,或者应用看似启动但外部无法连接。二者都应先检查实际监听状态,而不是直接重启服务器、杀进程或关闭防火墙。
确认协议、端口和预期监听地址
从应用配置或部署记录确认使用 TCP 还是 UDP、端口号是多少,以及服务应只供本机还是对外提供访问。同一个数字可以同时用于 TCP 与 UDP,它们不是同一个监听端点。
# 服务器:只读查看 TCP 443 的监听状态
Get-NetTCPConnection -State Listen -LocalPort 443 |
Select-Object LocalAddress, LocalPort, OwningProcess
没有结果时,应先确认应用启动是否成功、是否使用了其他端口,以及查询是否需要管理员权限。查询方式见 Get-NetTCPConnection 文档。不要为了得到预期结果而先添加防火墙规则;防火墙不能替一个未启动的应用创建监听。
127.0.0.1 表示 IPv4 回环监听,远程设备通常不能直接访问它。0.0.0.0 表示所有本机 IPv4 地址。IPv6 的 ::1 和 :: 需要分别理解,不能仅凭看到 IPv6 通配地址就断言所有 IPv4 客户端也一定能连接,仍应实际验证。
根据进程编号核查归属
# 服务器:将 1234 替换为刚查询到的实际进程编号
Get-Process -Id 1234 |
Select-Object Id, ProcessName, Path
进程可能在两次查询之间退出或重启,因此编号只是当前时刻的线索。进一步结合应用服务名称、进程路径、启动参数和部署记录判断归属。读取路径可能需要权限,空白结果并不意味着进程异常。
不要按照名称相似就终止进程。一个运行时进程可能承载多个业务;停止它会影响谁,应由配置与服务依赖关系决定。若确实存在端口冲突,优先调整新应用的端口或安排对已确认服务的受控变更,并保留原配置用于恢复。
如果监听归属显示为 PID 4,可能涉及 HTTP.sys 等内核组件。不能结束系统进程。可进一步用 netsh http show servicestate 查看 HTTP 服务状态,再定位注册该端点的应用,命令说明见 netsh http 文档。
本机成功后再测试远程路径
先在服务器本机验证,再从真正访问业务的客户端执行:
# 客户端:替换为实际域名或服务器地址
Test-NetConnection server.example.com -Port 443
重点看测试采用的目标地址和 TcpTestSucceeded。域名同时有 IPv4 与 IPv6 时,还应确认实际测试的是哪一个地址。该命令成功表示所测 TCP 连接可以建立,不代表 TLS 证书、HTTP 状态或登录功能一定正常,具体边界见 Test-NetConnection 文档。
本机成功、远程失败时,依次核查监听地址、Windows 防火墙的活动配置文件与规则作用域、云侧安全组、路由和地址映射。只为明确的来源与端口配置必要访问,不要通过关闭所有防火墙来长期解决问题。
UDP 要使用不同的证据
UDP 没有 TCP 那样的 Listen 连接状态,可用 Get-NetUDPEndpoint -LocalPort 53 查看本机 UDP 端点与所属进程。查询结果只能说明本机存在端点,不能说明远程请求已到达或应用正确响应。
UDP 应用需要协议本身的请求与响应验证,并结合应用日志或受控抓包。Test-NetConnection -Port 的 TCP 测试结果不能用来证明 UDP 服务可用。UDP 查询参数见 Get-NetUDPEndpoint 文档。
变更后重复同一组检查
修复应尽量只改变一个因素,例如恢复应用配置中的监听地址、修正一个防火墙规则或解除已确认的端口冲突。先保存旧配置与规则内容,再安排必要的重启,避免同时改变多个变量后无法判断哪一步有效。
最后重新记录监听地址、端口、进程归属和远程测试结果,并访问真实业务接口。若涉及远程桌面,应结合Windows 远程桌面排查确认服务和访问条件。保留变更前后的证据,下次故障才能快速区分应用未监听与网络路径变化。
参考资料
- Microsoft:Get-NetTCPConnection
- Microsoft:Test-NetConnection
- Microsoft:netsh http
- Microsoft:Get-NetUDPEndpoint