【错误】ShadowSocks端口已被占用
错误页面如上图,首先我们去排查一下是自己电脑的端口占用了SS的1080还是运行SS的服务器上的端口被占用了,方法很简单,使用手机打开SS这时如果能够正常访问的话就是自己的电脑端有软件占用了SS的1080端口,这时我们打开命令行(Win+R) 在如下图命令行里面输入:netstat -ano (列出所有端口的情况)
我们可以看到1080端口对应的PID是6148,然后我们就需要去找一下这个6148对应的什么程序,然后把它给关闭就可以正常启用SS 继续在命令行中输入:tasklist|findstr "6148"(注意使用英文输入法的引号)
如上图,我们能发现PID 6148对应的程序是什么(此处显示ShadowSocks是因为我已经排查好了)然后我们就可以手动关闭这个软件即可重新打开SS
如果不想使用命令行查看对应的程序,也可以打开任务管理器(Ctrl+Shift+Esc)点击进程选项,寻找PID是6148的程序进行结束进程
此时就可以重新打开SS了,回到解决方法的第一步,如果是手机客户端也没有办法访问,同时检查电脑的端口占用的时候并未发现有1080端口被占用的情况发生,那么我们就需要去排查一下搭建SS的服务器里面的程序端口使用情况,方法与上面排查的方式一样。
+++
但很多时候,没有进程在占用1080端口,依然会提示错误。
这个问题并不是端口被占用,通过 netstat 里找不到占用这个端口的程序。实际上,这个错误对应的 last-error 是 10013 (WSAEACCESS),权限不足。
根据2018年2月13日发布的 KB4074588 里的 known issue,这个补丁会调整操作系统的 reserve port ranges,可以通过运行 以下指令查看:
netsh interface ipv4 show excludedportrange protocol=tcp
在我自己的环境里,1027 ~ 1126 都被系统强制保留了,所以其他应用程序无法监听在这个端口,比如1080。
除了系统补丁会保留端口外,开启win10的hyper-v也会保留端口。
解决方法:更改SSR的本地端口
打开【选项设置】,修改【本地代理-本地端口】为一个未占用的端口即可。
将本地端口修改为"localPort": 1112,这里我随便选了一个没保留的端口。
Tag: SSR 端口 Window