存档

文章标签 ‘端口’

解决 error listen EACCES: permission denied 0.0.0.0:8081

2025年1月9日 没有评论

今天发现电脑在重启后,打开 NodeJS 项目后无法运行,提示 8081 端口被占用了。一开始以为是某个 node 非正常占用导致,关闭所有相关的软件并确认没有node 进程存在后,再次运行项目,发现还是提示端口被占用。

按照我先前整理的《查找端口被占用的程序,执行 netstat -ano | findstr 8081,发现找不到占用端口的进程。

看来要狂暴一下了。

经过一番搜索,网上有一个观点是端口被 WSL 占用了,大意是微软在使用 reservation/exclusion 机制来进行动态端口分配时,分配的端口号有的比较低,所以导致和其它软件冲突。

运行下面的命令:

netsh int ipv4 show excludedportrange protocol=tcp

发现 8081 端口在范围里面。

运行下面的命令:

netsh int ipv4 show dynamicport tcp

可以看到系统赋予的起始端口号确实比较低。

解决方法,就是重新设置动态端口的区间范围,例如运行下面的命令:

netsh int ipv4 set dynamic tcp start=49152 num=16384

非常重要的是,需要重启电脑。

重启后可以重新运行命令来确认下:

netsh int ipv4 show excludedportrange protocol=tcp

最后提醒大家的是,运行上面的命令时,最合适地是使用管理员权限来运行。

分类: 日常 标签:

查找端口被占用的程序

2022年8月8日 没有评论

在运行程序,特别是开发阶段,有时候会碰到程序提示端口被占用的情况。有的时候,我们可以改变端口号,但是某些时候,端口号不能修改,只能去找到底是被什么程序占用的。

首先,以管理员权限运行下面的命令:

netstat -ano

可以显示所有获得网络连接活动的程序列表,如果想看特定的端口,也可以一步到位,例如查找 4200 端口,输入:

netstat -aon | findstr "4200"

界面输出的列表最后一列就是 PID 信息,这个 PID 就是使用该端口的程序进程。然后在任务管理器里根据 PID 找到具体的进程,接下来就是根据情况杀死这个进程就可以了。

但是,但是,别急。一般情况下没有问题,实际操作上会发现有的时候,查出来的 PID 是 4,也就是 System 进程,该进程无法被结束。

是不是感觉很沮丧。

在网上一番检索后,又找到了针对 System 进程进一步分析的方法。

接着在命令行里输入:

netsh http show servicestate

在输出结果里查找目标端口号,再根据上下文找到“请求队列名称”的值,这个值就是具体的进程,再根据这个队列名称,在上下文里找到进程 ID。

最后就可以在任务管理器里结束相关进程拉。

分类: 工具 标签: ,