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

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

玖亖伍
2021-06-11 / 5 评论 / 3,714 阅读 / 正在检测是否收录...
温馨提示:
本文最后更新于2022年02月25日,已超过1000天没有更新,若内容或图片失效,请留言反馈。

有一个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
一切正常,问题解决。

参考
10

评论 (5)

取消
  1. 头像
    Ult
    Windows 10 · Google Chrome
    @

    画图

    回复
    1. 头像
      玖亖伍 作者
      Windows 10 · FireFox
      @ Ult

      优秀 👍

      回复
  2. 头像
    等待
    Windows 10 · Google Chrome
    @

    实测有效

    回复
  3. 头像
    TuTu
    Windows 10 · Google Chrome
    @

    感谢~~

    回复
  4. 头像
    匿名
    Windows 10 · Google Chrome
    @

    感谢,真有用折腾了一上午,都说端口占用,cmd查也没端口占用啊,还是你这个管用,对了我是在Google上搜到你的回答

    回复