端口被占用的原因及解决办法

本文提供了解决端口冲突的方法,包括如何查找占用端口的进程,并提供了Windows和Linux系统下的具体步骤。此外,还介绍了当端口被系统保留时的解决策略。

运行软件或者项目的时候,出现以下问题:

panic: blademaster: listen tcp: 0.0.0.0:8080: listen tcp 0.0.0.0:8080: bind: An attempt was made to access a socket in a way forbidden by its access permissions.

Windows系统

第一种情况:被其他程序占用

1、首先判断端口是被谁占用的。

1)使用运行打开cmd,直接输入 netstat -ano ,回车,最右面对应的是PID=1328.

 注:不建议使用此命令,端口太多,看不过来

2) 使用运行打开cmd,直接输入 以下命令 ,回车。查看被占用端口对应的PID

netstat -aon | find "8080" 或   netstat -aon | grep "8080"  #是查看8080单个端口的占用情况

******************************************************************************************************

netstat -aon | findstr "80" 或netstat -aon | findstr :80    #是查看包含80的一系列端口,例800,8080

2、查看PID对应的进程,输入 tasklist|findstr  "9880",查看占用该端口的进程

tasklist|findstr  "9880"

由以上可以看出,占用该端口的就是“vmware-hostd.exe”程序

 1)根据进程号杀掉进程

taskkill -f -pid 9880 或 taskkill /f /t /im vmware-hostd.exe

2)在任务管理器找到对应的进程,直接结束进程

第二种情况:被系统列为保留端口

提示端口被占用,但是却查不到占用的进程。
原因是 Windows 会保留一些端口,这些端口刚好处于被系统保留的端口序列里。

使用以下命令查看

netsh interface ipv4 show excludedportrange protocol=tcp

Windows 保留这些端口可能的原因:

  • 因为发现病毒活动而被微软屏蔽
  • 安装过windows update以后,保留的端口列表发生了变化
  • 开启了 Hyper-V 特性

有以下三种解决办法:

  1. 换用其他端口
  2. 关闭 Hyper-V 特性(可能关闭后还是会占用)
  3. 将这些端口设置为 Administered port exclusions

netsh int ipv4 add excludedportrange protocol=tcp startport=8000 numberofports=300

执行该命令之后,进行重启,再次查询保留端口,会发现端口列表末尾会出现一个 * 号,此时这些端口就不会被 Hyper-V 使用。

Linux系统

1、查看端口使用情况

netstat -tln //查所有

netstat -tln | grep 80 //只查80端口使用情况

netstat -aptn    //查看当前用户下所有开启的端口号

netstat -nupl    //查看系统中所有使用udp协议的端口号信息

netstat -ntpl     //查看系统中使用tcp协议的端口号信息

2、查看端口属于哪个程序?端口被哪个进程占用

lsof -i :80

3、杀掉占用端口的进程

kill -9 进程id

### 如何在 Ubuntu 系统中释放被占用端口 #### 查看端口占用情况 可以通过多种方式来查找哪些进程正在使用指定的端口。以下是几种常用的方法: 1. **使用 `netstat` 命令** 可以运行以下命令来查看特定端口是否已被占用以及由哪个程序占用: ```bash sudo netstat -nplt | grep :端口号 ``` 这里 `-n` 表示不解析服务名称,`-p` 显示与地址关联的 PID 和程序名,`-l` 列出监听套接字,`-t` 仅显示 TCP 协议的信息[^1]。 2. **使用 `lsof` 命令** 此外,还可以利用更强大的工具 `lsof` 来查询具体端口占用详情: ```bash sudo lsof -i :端口号 ``` 输出会提供关于该端口的相关信息,包括进程 ID (PID),这对于后续操作非常重要[^4]。 #### 终止占用端口的进程 一旦确认了某个端口正被不必要的进程所占据,则需终止这些进程才能释放端口资源。 1. **获取目标进程ID(PID)** 上述任一方法都可以帮助找到对应于已知端口的服务及其对应的 PID。 2. **强制杀死进程** 找到相应的 PID 后,执行如下指令即可停止相应进程从而解放其绑定的网络接口: ```bash sudo kill -9 PID ``` 替换其中的 “PID” 字段为你实际获得的具体数值[^3]。 完成上述步骤后应该能够成功解除端口封锁状态;如果仍然存在问题可能涉及到更高权限或者系统级配置冲突等情况则需要进一步排查分析原因所在。 ```python # 示例 Python 脚本用于自动化检测并尝试关闭给定端口上的连接(仅供参考学习用途) import os def release_port(port_number): try: result = os.popen(f'sudo lsof -i :{port_number}').read() lines = result.splitlines()[1:] # skip header line pids_to_kill = set([line.split()[1] for line in lines]) for pid in pids_to_kill: print(f'Killing process {pid}') os.system(f'sudo kill -9 {pid}') except Exception as e: print(e) if __name__ == "__main__": port = input('Enter the blocked port number:') release_port(int(port)) ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值