标签搜索

(Windows)以一种访问权限不允许的方式做了一个访问套接字的尝试处理

admin
2021-06-11 / 0 评论 / 8 阅读 / 正在检测是否收录...

有一个ASP.NET Core的项目,使用了一个固定端口13501, 突然有一天,启动项目时,报System.Net.Sockets.SocketException (10013): 以一种访问权限不允许的方式做了一个访问套接字的尝试的异常,无法监听端口。
socket-error-01.png
此时第一反应是其他程序占用了13501端口,于是在cmd(出于bug敏感,直接以管理员身份启动)中执行netstat -ano | findstr 13501,发现啥也没有,说明不是被其他程序占用了,但是为何不让我监听使用呢?

经过一番搜索/尝试/验证后,似乎在Stack Overflow上找到了方向:

Kestrel unable to start

socket-error-02.png

在cmd尝试执行netsh interface ipv4 show excludedportrange protocol=tcp, 果然发现了13501是在排除范围之内(13492~13591):
socket-error-03.png
那么就想,能否移除这条规则呢,通过搜索来的命令,修改相关端口范围后执行:
netsh interface ipv4 delete excludedportrange protocol=tcp startport=13492 numberofports=100
socket-error-04.png
果然发现自己还是太天真了。。。那怎么办呢?虽然曾经遇到这个问题后浅尝辄止,搞不定后直接重启,每次都可以解决,但是系统任务栏一排软件开启的,浏览器中无数个标签打开的,重启代价太大,而且这个问题就像个地雷,指不定以后啥时候还会在遇到,于是决定以excludedportrange为搜索关键词继续查找。
终于,在Stack Overflow的兄弟网站StackExchange/superuser看到了希望。继续尝试看到的指令的指令(先停止掉NAT服务,然后再开启):

net stop winnat
netsh interface ipv4 show excludedportrange protocol=tcp
net start winnat
netsh interface ipv4 show excludedportrange protocol=tcp

socket-error-05.png
咦~好像OK了(判断依据: 13501已经不在排除端口范围之内了),再次运行我的ASP.NET Core的项目,正常监听,再(多此一举)看下端口监听:
netstat -ano | findstr 13501
socket-error-06.png
一切正常,问题解决。

参考
0

评论 (0)

取消