问题现象
在 Windows 10 中,使用 Bitvise SSH Client 配置本地代理转发端口(127.0.0.1:10800)时失败,报错:
Could not enable SOCKS/HTTP proxy forwarding on 127.0.0.1:10800: Address is already in use; bind() failed: Windows error 10013
排查步骤与命令记录
1. 检查是否有进程监听 10800(无结果)
# PowerShell 方式
Get-NetTCPConnection -LocalPort 10800 | Select-Object OwningProcess
# 或使用 netstat(CMD/PowerShell 均可)
netstat -ano | findstr :10800
→ 无输出,说明没有常规 TCP 监听。
2. 检查是否有隐藏的端口转发规则
netsh interface portproxy show all
→ 无输出,排除 portproxy 占用。
3. 使用 Process Explorer 深度扫描(GUI 工具)
- 下载 Process Explorer
- 以管理员身份运行 → Ctrl+F → 搜索
10800
→ 未发现任何句柄或线程绑定。
4. 关键一步:检查 Windows “排除端口范围”
netsh int ipv4 show excludedportrange protocol=tcp
输出示例(问题存在时):
开始端口 结束端口
---------- --------
10745 10844 ← 10800 被包含在此区间!
10845 10944
...
结论:端口 10800 被 Windows NAT 服务动态保留,普通程序无法绑定。
解决方案:重启 winnat 服务重置端口预留
适用于个人开发机,不影响日常使用。若使用 WSL2/Docker,操作后可能需重启相关服务。
# 以管理员身份运行 PowerShell
# 停止 Windows NAT Driver
net stop winnat
# 启动 Windows NAT Driver(会重建排除范围,通常大幅缩小)
net start winnat
验证是否生效:
netsh int ipv4 show excludedportrange protocol=tcp
正常输出(问题解决后):
开始端口 结束端口
---------- --------
80 80
5357 5357
50000 50059 *
→ 10745–11144 的“端口块” 范围已消失,这样所需的 10800 就可用了!
验证
- 重新连接 SSH,并启用本地代理转发到
127.0.0.1:10800 - 成功启动,无报错!
总结
| 问题根源 | Windows 自动将一些 端口段 加入“排除端口范围” |
|---|---|
| 表象 | 报“Address already in use”,但 netstat 查不到 |
| 核心命令 | netsh int ipv4 show excludedportrange protocol=tcp |
| 快速修复 | net stop winnat && net start winnat |
(Qwen3-Max 帮助整理文档与格式)