当前位置:首页 > 云服务器 > 正文

linux服务器查看端口是否打开

Linux 服务器上,可通过 netstat -tuln | grep 端口号或 ss -tuln | grep 端口号命令查看端口是否打开

常用命令汇总

工具/命令 作用说明 适用场景示例
netstat -tulnp 显示所有监听中的TCP/UDP端口及对应进程PID 快速排查哪些服务正在占用特定端口
ss -tulnp 新一代替代netstat的工具,性能更优且功能相似 高并发环境下推荐使用(如云服务器
lsof -i :<port> 根据端口号精准定位关联的文件描述符和进程路径 当已知目标端口但不确定归属时(例如怀疑恶意程序绑定了80端口)
telnet <IP> <port> 测试远程主机的指定端口是否可连接(需安装telnet客户端) 验证防火墙外网访问权限或跨网络通信故障
nc -zv <IP> <port> Netcat工具实现无数据传输的端口探测,支持超时设置 自动化脚本中批量检测多个服务器端口状态


分步操作指南

步骤1:基础状态查询(以ss为例)

执行命令:

ss -tulnp | grep <目标端口号>

输出解析:若存在记录则表示该端口已被占用,各列含义如下:

  • LISTEN:当前处于监听状态
  • 0.0.0:8080:绑定的所有IP地址及端口组合
  • users:(("nginx",pid=1234,fd=5)):所属用户、进程名、PID和文件句柄编号

️ 注意:如果显示为ESTABLISHED而非LISTEN,说明已有活跃连接而非单纯监听。

步骤2:进程溯源(结合lsof)

当发现可疑端口时进一步追踪:

lsof -i :8080 # 替换为目标端口

关键信息提取:重点关注COMMAND列对应的可执行文件路径,例如/usr/sbin/apache2表明是Apache HTTP服务组件。

linux服务器查看端口是否打开 第1张

步骤3:外部可达性验证

本地显示开放不代表能被外部访问!必须用以下方式确认:

# 方案A:Telnet测试(交互式) telnet your_server_ip 8080 # 成功响应应出现类似 "Connected to ..." 的提示 # 方案B:Netcat静默检测(推荐) nc -zv your_server_ip 8080 # 输出包含 "succeeded" 即代表端口可访问

提示:如果返回Connection refused,可能原因包括:①防火墙拦截 ②服务未正确绑定外网接口。

linux服务器查看端口是否打开 第2张

linux服务器查看端口是否打开 第3张


典型错误处理对照表

现象 可能原因 解决方案
netstat无对应记录 服务未启动/配置错误 systemctl start

Telnet连接失败 IPTABLES规则限制 iptables -L -n –line-number
lsof查不到进程关联 PID已终止但僵尸进程残留 ps auxfww
Nginx报”address already in use” 旧实例未完全释放端口 fuser -k 80/tcp && systemctl restart nginx


常见问题与解答

Q1: 为什么有些时候netstat看不到我新启动的服务?

A: Linux系统默认会延迟回收TIME_WAIT状态的连接导致端口暂时不可用,可通过修改内核参数立即释放资源:

echo 'net.ipv4.tcp_fin_timeout = 15' >> /etc/sysctl.conf sysctl -p

或者使用socat工具强制重用端口:socat TCP-LISTEN:8080,fork,reuseaddr ABSTRACT-UNIX

Q2: 如何永久关闭某个不需要的端口?

A: 分两步操作最安全:①停止对应服务(如systemctl stop cupidsrv),②通过firewalld禁用入站规则:

firewall-cmd --permanent --remove-port=666/tcp firewall-cmd --reload

️ 注意:仅依赖防火墙屏蔽存在风险,建议优先确保服务端不再

0