查看Linux服务器开放端口,最直接的方法是使用ss命令,输入ss -tlnp即可列出所有TCP端口监听状态,加上grep筛选就能快速定位你关心的端口。 这个命令在绝大多数Linux发行版中默认可用,无需额外安装,比传统netstat更快更准。
核心命令:linux查看端口命令 ss 与 netstat 对比
ss属于iproute2包,是netstat的现代替代方案,两者都能列出开放端口,但ss在信息细节和性能上更胜一筹,下面分别拆解它们的用法。
ss命令详解
ss命令参数组合很短,但很实用,常用组合是ss -tlnp,含义如下:
- -t:只显示TCP端口
- -l:只显示监听中的端口(LISTEN状态)
- -n:以数字格式显示地址和端口,避免解析服务名
- -p:显示占用端口的进程PID和名称
要查看UDP端口,把-t换成-u,比如ss -ulnp,想同时看TCP和UDP,直接写ss -tulnp。
实操示例:
- 查看所有监听端口:
ss -tlnp - 查看80端口是否开放:
ss -tlnp | grep :80 - 查看特定进程占用的端口:
ss -tlnp | grep nginx
netstat命令详解
netstat默认不包含在最小化安装的Linux中,需要额外安装net-tools包,常用组合是netstat -tuln,参数:
- -t:TCP
- -u:UDP
- -l:监听状态
- -n:数字格式
- -p:显示进程(需root权限)
注意: 很多线上系统已经不再预装netstat,遇到command not found时,直接用ss即可。
ss与netstat对比
| 对比项 | ss | netstat |
|---|---|---|
| 默认安装 | 是(iproute2) | 否(需额外安装) |
| 执行速度 | 快,直接从内核读取数据 | 较慢,读取/proc文件系统 |
| 信息详细度 | 更详细,显示socket状态、缓冲区信息 | 基本够用 |
| 适用场景 | 现代运维首选 | 兼容旧脚本或习惯 |
据统计,近年来新装Linux系统默认都不带netstat,所以ss是更稳妥的linux查看端口命令。
怎么查看linux服务器端口是否开放从本地到远程
本地检查只能看到端口是否在监听,外部验证才能确认端口真正可达,防火墙可能拦截流量,即使端口在监听。
本地检查端口监听状态
登录服务器后,直接运行ss -tlnp,输出中State列为LISTEN代表端口开放,如果端口不在列表中,说明服务没启动或配置错误。
具体步骤:
- 查看所有监听端口:
ss -tlnp - 筛选特定端口,如
ssh -tlnp | grep 3306 - 确认进程无误:
ss -tlnp | grep mysqld
从外部验证端口是否开放
在另外一台机器上(或同一个云账号下的内网机器),用以下工具测试:
- telnet:
telnet 服务器IP 端口,如果连接成功,显示Connected,说明端口开放 - nc (netcat):
nc -zv 服务器IP 端口,-z表示只扫描不发送数据,-v打印详细信息 - curl:针对HTTP/HTTPS端口,
curl -I http://服务器IP:端口,看返回的头信息
注意: 测试时保证目标机器防火墙允许入站流量,否则会显示超时或被拒绝。
防火墙规则对端口开放的影响
即使端口在监听,防火墙没放行,外部依然无法访问,检查防火墙规则:
- iptables:
iptables -L -n查看所有规则链,注意INPUT
链是否允许目标端口
- firewalld:
firewall-cmd --list-ports查看开放端口,或firewall-cmd --list-all查看完整配置 - ufw:
ufw status查看启用的规则
排查思路: 先本地确认端口在监听,再确认防火墙放行,最后从外部测试,如果本地监听但外部不通,多半是防火墙或云厂商安全组规则没配置。
端口被占用怎么办?排查linux哪个端口被占用
当启动服务时提示“端口已占用”,需要找到占用端口的进程并处理。
查找占用端口的进程
使用ss -tlnp直接显示PID和进程名,如果端口处于非监听状态,用ss -tanp查看所有TCP连接(包括已建立),也可以使用lsof -i :端口号,但这需要root权限才能看到完整进程信息。
示例: 查看80端口被谁占用
ss -tlnp | grep :80
# 输出类似:LISTEN 0 128 :80 : users:(("nginx",pid=1234,fd=6))
说明PID为1234的nginx进程占用80端口。
释放端口或修改配置
根据占用进程决定处理方式:
- 如果是必需服务,记录其PID,确认后可以用
kill -9 PID强制终止(谨慎使用,可能影响业务) - 如果是自己启动的测试程序,直接关闭即可
- 如果是误配置导致端口冲突,修改服务配置文件(如Nginx的
listen指令),重启服务
预防建议: 在启动服务前,先用ss -tlnp | grep :端口号确认端口空闲,避免冲突。
进阶:linux端口开放状态查询与安全审计
除了基础查看,安全人员常需要系统性地扫描端口范围,评估暴露面。
使用nmap扫描端口
nmap是专业的端口扫描工具,不要对未授权服务器使用,常见用法:
- 扫描单个端口:
nmap -sT 目标IP -p 22,80,443 - 扫描常见端口:

nmap -sT --top-ports 100 目标IP
- 快速扫描全部端口:
nmap -sT -p- 目标IP(耗时较长)
注意: 云服务器上使用nmap扫描自己或同内网机器,不会触发违规,但扫描外部IP可能被记为攻击行为。
定期检查开放端口的必要性
行业共识认为,缩小开放端口范围是降低入侵风险的最有效手段之一,很多安全事件都是因为非必要端口暴露在公网(如Redis、MongoDB默认端口未加限制),建议每季度使用ss -tlnp和防火墙规则对比,关闭不再使用的端口。
实操建议:
- 列出所有监听端口:
ss -tlnp - 与业务端口清单对比,标记异常端口
- 用防火墙限制来源IP,只允许特定IP访问管理端口
常见问题与解答(linux端口开放状态查询Q&A)
如何查看Linux服务器所有开放端口?
使用ss -tlnp(TCP)和ss -ulnp(UDP)即可列出所有监听端口,要查看包含已建立连接在内的所有端口,去掉-l参数,如ss -tanp,如果系统没有ss,用netstat -tuln代替。
用什么命令查看端口对应的服务名称?
ss -tlnp中users字段会显示进程名和PID,如果显示不完整,用lsof -i:端口号(需root)能更详细地列出进程信息,包括文件描述符,也可以组合ps -p PID -o comm=获得进程名。
ss和netstat有什么区别?
ss是iproute2包的一部分,默认安装,直接从内核获取数据,速度快且信息丰富;netstat来自net-tools包,需要额外安装,解析/proc文件系统,较慢,多数情况下,ss已经完全覆盖netstat的功能,建议优先使用ss,如果需要在旧脚本中保持兼容,netstat仍有存在价值,但新系统应转向ss。
掌握ss和netstat命令,再结合防火墙规则检查,就能完整掌握Linux服务器的端口开放状态。
图片来源于AI模型,如侵权请联系管理员。作者:酷小编,如若转载,请注明出处:https://www.kufanyun.com/ask/689452.html


评论列表(1条)
读了这篇文章,我深有感触。作者对端口的理解非常深刻,论述也很有逻辑性。内容既有理论深度,又有实践指导意义,确实是一篇值得细细品味的好文章。希望作者能继续创作更多优秀的作品!