我正在使用这个 Python 代码来监听我的 Windows 10 系统上的一个端口:
import socket
for port in (50059, 50060, 50959, 50960):
try:
print(socket.socket(socket.AF_INET, socket.SOCK_STREAM).bind(('localhost', port)))
except OSError as e:
print(e)
然而,它打印
None
[WinError 10013] An attempt was made to access a socket in a way forbidden by its access permissions
[WinError 10013] An attempt was made to access a socket in a way forbidden by its access permissions
None
这意味着我无法访问端口 50060 和 50959。我进一步实验并确认我无法监听 50060-50959 范围内的任何端口。
更新:升级到 Windows 10、2004 后,其端口范围 50060-59708 不知为何被阻止了。
我想监听端口 50323,它属于这个范围(两种情况)。
我试图netstat -aonq
找出罪魁祸首,但没有成功
C:\Users\bers>netstat -aon | grep :50
TCP 0.0.0.0:5040 0.0.0.0:0 LISTENING 8008 (Connected Devices Platform Service)
TCP 10.0.0.20:50985 51.105.249.223:443 ESTABLISHED 5208 (Windows Push Notifications System Service)
UDP 0.0.0.0:500 *:* 4936
UDP 0.0.0.0:5050 *:* 8008
UDP [::]:500 *:* 4936
似乎没有其他东西在这个范围内监听。那我为什么不能呢?50060-50959
正好是 900 个端口 - 我确信这不是巧合。(更新:嗯,我是 - 它是 Windows 10、2004 上的 9649 个端口。)
我检查过
- 10013 无法创建套接字错误,但是没有任何东西在监听该端口
- 无法绑定的 TCP/UDP 端口(权限错误),但不会显示在 netstat 中
- 确定 Windows 上哪个进程绑定了端口(未监听)
- https://stackoverflow.com/questions/48198/how-can-you-find-out-which-process-is-listening-on-a-port-on-windows
这意味着我也尝试过netstat -q
,参见上文,,,tcpview.exe
并resmon.exe
禁用了 Internet 连接共享 (ICS)。
答案1
如果你在 Win10 2004 上遇到此问题,这是由于此更新中的问题,请执行以下操作下列的:
netsh int ipv[46] set dynamic tcp start=49152 num=16384
reg add HKLM\SYSTEM\CurrentControlSet\Services\hns\State /v EnableExcludedPortRange /d 0 /f
我在打开 Jetbrains IDE 和许多其他使用套接字的程序时遇到了这个问题。