Windows 端口监听失败
在监听端口过程中,经常会遇到这样的报错
10013: An attempt was made to access a socket in a way forbidden by its access permissions [WinError 10013] 以一种访问权限不允许的方式做了一个访问套接字的尝试
通常,造成该问题的原因是端口占用,可以检查相应端口的进程并关闭。如,检查占用 1080 的应用
netstat -ano | findstr 1080
但是,很多时候下,会发现端口并未被占用,仍然报这个错误。这时大概率的原因是该端口被系统保留。
使用下面的命令,可以查看被保留的端口范围
> netsh int ipv4 show excludedportrange tcp 协议 tcp 端口排除范围 开始端口 结束端口 ---------- -------- 1024 1281 3945 4044 4045 4144 4145 4244 5357 5357 6070 6169 6170 6269 6270 6369 6370 6469 6470 6569 6771 6870 6871 6970 6971 7070 7071 7170 7171 7270 7571 7670 7681 7780 7781 7880 7881 7980 7981 8080 8082 8181 8182 8281 8308 8407 9001 9001 50000 50059 * * - 管理的端口排除。
如果相应的程序(大概率是 Hyper-V)没有运行,可以使用下面的程序把 1080~1090 范围从保留中去除
netsh int ipv4 add excludedportrange tcp 1080 10
如果 Hyper-V 在运行中,则可以分别使用下面的命令开关 Hyper-V,不过一般直接关闭 Hyper-V 重启后,程序会占用对应的端口,下次再启动就不会保留用到的端口了
dism.exe /Online /Disable-Feature:Microsoft-Hyper-V dism.exe /Online /Enable-Feature:Microsoft-Hyper-V
也有人给出了如下方案:
netsh int ipv4 set dynamic tcp start=51001 num=5000 reg add HKLM\SYSTEM\CurrentControlSet\Services\hns\State /v EnableExcludedPortRange /d 0 /f netsh int ipv4 show excludedportrange protocol=tcp