我如何知道是什么阻止我的套接字绑定到 localhost:50060-50959

我如何知道是什么阻止我的套接字绑定到 localhost:50060-50959

我正在使用这个 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 个端口。)

我检查过

这意味着我也尝试过netstat -q,参见上文,,,tcpview.exeresmon.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 和许多其他使用套接字的程序时遇到了这个问题。

相关内容