在Linux上判断服务器端口开没开,本质要分两层:先看本机是否真的在监听,再看从另一台机器能不能连过去,最常用的组合命令是 ss -tlnp 和 nc -zv IP 端口。如果只在服务器本机看到端口监听,不代表外部一定能连上,因为中间还有防火墙、云安全组、网络策略等关卡。
linux查看服务器端口是否开放的4个基础命令
本机端口状态是所有排查的起点,服务没监听,后面全部免谈,下面四个命令能快速回答“这个端口到底有没有进程在听”。
用ss命令看本机监听端口
ss 是现代Linux发行版里替代 netstat 的首选工具,速度快,参数清晰。
- 查看所有TCP监听端口:
ss -tlnp - 查看指定端口:
ss -tlnp | grep :8080 - 查看UDP监听端口:
ss -ulnp
输出里重点关注监听地址。0.0.0:80 表示所有网卡上都监听,外部可访问;0.0.1:3306 表示只在回环地址监听,外部连不上。
用netstat命令核对老系统端口
有些CentOS老版本或精简容器镜像里没有 ss,netstat 仍然可用。
- 查看TCP监听:
netstat -tlnp | grep :22 - 查看所有端口:
netstat -anp | grep LISTEN
如果既不支持 ss 也不支持 netstat,可以使用 cat /proc/net/tcp 查看内核记录的端口状态,但可读性较差。
用lsof直接定位进程和端口
lsof 的优势是把端口、进程名、PID一次显示出来。
- 查看MySQL端口:
lsof -i :3306 - 查看所有网络连接:
lsof -i -P -n | grep LISTEN
普通用户可能看不到其他用户的进程详情,必要时加 sudo。
只看本机监听还不够
行业共识认为,排查端口连通性问题应遵循“先本机监听、再远端测试、最后链路策略”的顺序,只执行 ss 或 netstat 只能确认服务是否在本机开了一条路;远端能不能走通,还需要从另一台机器发起连接测试。
linux怎么测试某个端口通不通:从另一台Linux发起连接
假设服务器A上已经确认 ss -tlnp 能看到 0.0.0:80,接下来需要在服务器B或本地电脑上验证能否实际建立TCP连接。
没有telnet命令时用nc测试端口通不通
很多最小化安装的Linux没有 telnet,nc 是更轻量的替代品。
nc -zv 目标IP 前端端口- 示例:
nc -zv 192.168.1.10 22
参数含义简单:-z 表示只测试连通性,不实际发送数据;-v 显示详细过程,连上会看到类似 Connected to 192.168.1.10 22 port [tcp/] succeeded!;拒绝会看到 Connection refused;超时则说明包可能被防火墙丢弃。
用bash自带/dev/tcp快速探测端口
如果连 nc 都没有,可以用bash的虚拟文件 /dev/tcp,不需要安装任何软件。
timeout 3 bash -c "echo > /dev/tcp/目标IP/端口" && echo open || echo closed- 示例:
timeout 3 bash -c "echo > /dev/tcp/203.0.113.5/443" && echo open || echo closed
这个命令会尝试建立TCP连接,成功返回0然后输出open,失败或超时输出closed,适合在极简环境或容器里快速验证。
telnet命令在部分场景仍然直观
telnet 虽然常被安全规范建议禁用,但作为端口测试工具仍然直观。
telnet 目标IP 端口- 连上会出现
Escape character is '^]',说明TCP握手成功。 Connection refused说明目标主机可达,但服务未监听该端口。- 长时间无响应基本是网络不通或防火墙丢包。
nmap批量扫描端口更高效
需要一次测试多个端口时,nmap 更合适。
nmap -p 80,443 目标IPnmap -p- 目标IP扫描全部TCP端口nmap -sU -p 53 目标IP测试UDP端口
生产环境使用 nmap 要注意扫描频率,部分云平台可能对端口扫描行为进行限制。
服务器端口开放了但是连接不上怎么排查
这是实际运维中占比相当高的问题,服务已经监听,本机访问正常,但外部就是连不上,要按顺序排查四层。
第一步:确认服务监听地址是0.0.0.0而不是127.0.0.1
很多数据库、缓存服务默认只监听本机,MySQL配置里常见的 bind-address=127.0.0.1 就会导致外部无法连接。
排查命令:
ss -tlnp | grep 3306,重点看左侧地址。- 如果监听是
0.0.1:3306,需要修改服务配置文件,把绑定地址改为0.0.0,然后重启服务。
第二步:检查云服务器安全组和系统防火墙
简米云服务器端口不通的多数情况是安全组默认拒绝入站流量,云安全组相当于机房入口的闸机,系统防火墙是服务器自身的门禁,两层都要放行。
系统防火墙排查命令:
- CentOS/RedHat:
firewall-cmd --list-all - Ubuntu/Debian:
ufw status - 通用查看内核过滤规则:
iptables -L -n
放行端口示例:
firewall-cmd --zone=public --add-port=8080/tcp --permanent && firewall-cmd --reloadufw allow 8080/tcp
云安全组需要在控制台添加入方向规则,允许指定端口对指定来源IP开放。
第三步:考虑运营商或中间网络阻断
如果云安全组和系统防火墙都已放行,内网IP能连通,但公网IP连接失败,要考虑链路中间的运营商策略,国内云服务器用公网IP提供HTTP服务时,80和443端口通常需要完成备案接入才可正常使用,某些非标准端口也可能被本地网络或运营商限制。
第四步:用tcpdump抓包看握手到达情况
当外部连接卡住时,最直接的判断是看包有没有到达服务器网卡。
tcpdump -i eth0 port 8080 -nn
从客户机发起一次连接,观察服务器端输出,如果只看到 S 标志的SYN包,没有回 S. 的SYN-ACK,说明请求到了服务器但服务响应异常;如果完全没有包,说明流量可能在安全组或上游网络被丢弃。
不同Linux发行版下检查端口开放状态的差异
CentOS/RedHat系列额外关注firewalld和SELinux
- firewalld需要查看
firewall-cmd --list-ports确认端口已放行。 - SELinux可能限制服务绑定非标准端口,可以用
semanage port -l | grep 8080查看端口是否在允许范围。 - 若服务启动报错,可检查
/var/log/audit/audit.log中的SELinux拒绝记录。
Ubuntu/Debian系列额外关注ufw和AppArmor
ufw status verbose查看当前规则。- 云镜像有时默认不启用ufw,此时端口不通更多来自云安全组。
- AppArmor通常对端口开放影响较小,但服务丢包时可临时查看
aa-status。
容器场景端口映射容易漏掉
docker ps查看容器端口映射关系,0.0.0:8080->80/tcp。docker port 容器名可单独查看映射。- 容器内
0.0.0:80监听但宿主机没有-p参数映射,外部仍然连不上。 - Docker的端口映射相当于宿主机上的代理监听,可以用
ss -tlnp | grep 宿主机端口确认映射是否生效。
下面用一张对比表总结常用命令的适用场景和判断重点。
| 命令 | 使用场景 | 关键输出 | 局限 |
|---|---|---|---|
ss -tlnp |
本机监听检查 | 监听地址、进程名 | 不能测远端连通性 |
nc -zv IP 端口 |
远端TCP连通测试 | succeeded/refused | 部分精简系统可能没有nc |
timeout 3 bash -c "echo > /dev/tcp/IP/端口" |
无额外工具时的远端测试 | open/closed | 不适合批量扫描 |
nmap -p 端口 IP |
多端口批量测试 | open/filtered/closed | 部分云平台限制扫描行为 |
tcpdump -i eth0 port 端口 |
深度抓包分析 | 是否收到SYN、是否回复ACK | 需要root权限,输出量大 |
linux查看服务器端口是否开放相关常见问题
常见问题:linux查看服务器端口是否开放有哪些简单命令?
使用 ss -tlnp | grep 端口号、netstat -tlnp | grep 端口号 或者 lsof -i :端口号 都能快速确认本机是否监听,若只是想知道进程是否存在,ss -tlnp 最直接;若要看哪个进程占用,lsof 信息更全。
常见问题:没有telnet命令怎么测试远端服务器端口通不通?
优先用 nc -zv 目标IP 端口,或者 timeout 3 bash -c "echo > /dev/tcp/目标IP/端口",如果允许安装工具,nmap -p 端口 目标IP 也可靠,三个命令都不依赖 telnet,适合极简系统。
常见问题:服务器端口开放了但是连接不上,最先检查哪里?
先在本机执行 ss -tlnp | grep 端口,确认监听地址是否包含 0.0.0,如果监听正常,再去云平台安全组和系统防火墙核对入站规则。简米云服务器端口不通常见原因是安全组没有放行对应端口,最后用 tcpdump 观察SYN包是否到达服务器网卡,确定断点位置。
判断服务器端口开没开,不能只看本机监听状态,还要从远端实际建立TCP连接验证,先用 ss 或 lsof 确认服务存在,再用 nc 或 /dev/tcp 测试连通性,最后逐层检查防火墙、云安全组和监听地址,就能大概率定位到端口请求丢在哪一层。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/642281.html





