Bean Network Tester

哪个程序在使用这个端口?

服务器无法在 8080 端口启动,或者测试以 "address already in use" 报错结束。要么已有程序占用了该端口,要么 Windows 把它预留了,而这两种错误看起来很像。下面说明如何区分。

端口打不开的两个原因

发生了什么表现怎么办
有程序占用了端口错误提示地址已被使用(EADDRINUSE,或 Windows 错误 10048)。该程序会出现在套接字列表中。关闭该程序,或换一个端口。
Windows 预留了端口错误提示访问被禁止(Windows 错误 10013),但并没有程序在监听。列表中没有任何程序。换一个预留范围之外的端口,或释放该范围。重启 WinNAT 服务通常有效。

用 Windows 自带的工具

套接字列表用进程 ID 表示所有者。先找到端口,再查这个 ID:

netstat -ano | findstr :8080
tasklist /fi "PID eq 4321"

在 PowerShell 中同样可以查,TCP 和 UDP 都行:

Get-NetTCPConnection -LocalPort 8080 | Select-Object LocalAddress, State, OwningProcess
Get-NetUDPEndpoint -LocalPort 5353 | Select-Object LocalAddress, OwningProcess
Get-Process -Id 4321

如果没有程序占用端口,就查看 Windows 预留了哪些范围:

netsh int ipv4 show excludedportrange protocol=tcp

再用 protocol=udp 运行一次。预留范围按协议分别记录,所以同一个端口可能对 UDP 是空闲的,对 TCP 却被预留。

用 工具 选项卡

工具 选项卡无需控制台就能回答同样的问题:

所以结果是一张表,而不是简单的“是”或“否”:Windows 按协议分别预留范围,监听 IPv6 的程序可以占着一个在 IPv4 上空闲的端口。

不会通过网络发送任何内容。对每个端口,工具都在本机的环回地址上向 Windows 申请它,然后立刻归还。

知道是谁占用之后

在任一表格中右键点击某一行,即可把占用该端口的程序设为目标。这只会填写目标字段,在你点击 开始 之前不会有任何改变。接下来怎么做,见只针对一个应用。

它不做什么

它只读取,不修复:从不关闭程序,也从不释放预留范围。属于其他账户的套接字不会显示程序,除非该工具以管理员身份运行。

接下来

准备好故意搞坏自己的网络了吗?

下载 Windows 版