Linux怎么查看开放了哪些端口号

来源:我的博客作者:向日葵头衔:草根站长
导读:本期聚焦于小伙伴创作的《Linux怎么查看开放了哪些端口号》,敬请观看详情。服务器上线后突然无法访问某个服务,第一反应往往是端口有没有真正监听。Linux系统提供了多种原生命令来确认当前主机开放了哪些端口号,不同工具在输出粒度和适用场景上有明显区别。netstat能直观列出监听套接字但部分新系统已弃用,ss作为替代命令执行更快且信息更全,lsof可从进程维度反查占用端口。理解这些命令的参数含义,比如区分tcp与udp、监听态与连接态,才能准确判断防火墙之外的实际开放情况。本文以实际输出为例说明每条命令的关注重点。

在Linux系统中,确认主机当前开放了哪些端口号是运维排查和网络配置的基础操作。端口是否处于监听状态,直接决定了外部能否通过该端口访问对应服务。除了防火墙策略之外,真正决定端口可用性的还是应用程序是否在对应地址上完成了bind和listen。

Linux怎么查看开放了哪些端口号

使用netstat命令查看监听端口

netstat是一个经典的网络统计工具,虽然在部分新发行版中被标记为弃用,但多数服务器仍可使用。它通过读取/proc/net下的信息来展示套接字状态。查看开放端口时,我们主要关注处于LISTEN状态的本地地址和端口。

常用命令为netstat -tulnp,其中-t表示tcp,-u表示udp,-l表示仅显示监听套接字,-n表示以数字形式显示地址和端口,-p表示显示进程信息。如果不加-n,端口可能显示为服务名如http而非80,不利于精确核对。

# 查看所有监听中的tcp和udp端口及对应进程
netstat -tulnp

# 示例输出片段
# Proto Recv-Q Send-Q Local Address  Foreign Address State  PID/Program name
# tcp        0      0 0.0.0.0:22     0.0.0.0:*       LISTEN 1234/sshd
# tcp6       0      0 :::80          :::*            LISTEN 5678/nginx
# udp        0      0 127.0.0.1:53   0.0.0.0:*              2345/dnsmasq

从输出可以看到,tcp的22和80端口分别在IPv4和IPv6上监听,udp的53仅绑定本地回环。若某服务配置为监听127.0.0.1:3306,则外部网络无法连接,这种端口虽开放但不对外可见。

netstat的缺点在于当连接数极大时,遍历socket信息较慢,且部分最小化安装的容器镜像未包含该命令。此时应优先考虑下面的ss命令。

使用ss命令高效查看端口

ss(socket statistics)来自iproute2套件,直接通过netlink接口向内核获取套接字信息,速度远快于netstat。它的参数设计与netstat类似,便于迁移使用习惯。

执行ss -tulnp即可得到与netstat结构相近的监听列表。此外,ss支持更灵活的过滤表达式,例如ss -tlnp 'sport = :80'可只看80端口的tcp监听。对于排查特定端口被谁占用非常高效。

# 查看tcp监听端口,数字显示并带进程
ss -tlnp

# 仅查看udp监听
ss -uln

# 过滤特定端口
ss -tlnp sport eq :443

在输出中,Local Address:Port列显示绑定地址,如0.0.0.0:22表示所有网卡均可访问,127.0.0.1:6379表示仅本机。State列对监听套接字显示为LISTEN,而udp无状态故为空。

相比netstat,ss还能展示更多内核级指标如拥塞控制、重传超时等,但在单纯查看开放端口场景下,其速度和默认可用性更具优势,推荐作为首选。

使用lsof从进程反查端口

lsof全称list open files,在Linux中一切皆文件,网络连接也以文件描述符存在。因此lsof能列出某进程打开了哪些网络端口,适合已知服务名但不确定其端口的场景。

命令lsof -iTCP -sTCP:LISTEN -Pn可列出所有处于监听的tcp端口,-P避免端口转服务名,-n避免主机名解析。也可针对进程查,如lsof -p 5678看nginx开了哪些端口。

# 列出所有监听的tcp端口
lsof -iTCP -sTCP:LISTEN -Pn

# 查看指定pid打开的网络端口
lsof -p 5678 -i

# 示例输出
# COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
# sshd   1234 root 3u IPv4 12345 0t0 TCP *:22 (LISTEN)
# nginx  5678 root 6u IPv6 23456 0t0 TCP *:80 (LISTEN)

lsof的输出以进程为中心,能直接看到 COMMAND 和 PID,对定位陌生端口背后的程序很有帮助。例如发现某随机高端口监听,用lsof可立刻知道是否为恶意进程。

不过lsof需要足够权限,普通用户可能看不到其他用户的进程端口,通常需配合sudo使用。且在大负载下lsof遍历开销也不小,仅建议针对性排查时采用。

端口状态与防火墙的关系

通过上述命令看到端口处于LISTEN,仅代表服务在本机已开放监听,不代表外部一定能连通。中间可能经过iptables、nftables或云安全组拦截。因此需要分层确认。

可用iptables -L -nnft list ruleset查看过滤规则,若某端口被DROP则外部不可达。另外,使用ss -tunp看到的是内核套接字层,而防火墙在更前置的netfilter钩子上起作用,二者互补而非替代。

# 查看iptables过滤规则(需root)
iptables -L -n -v

# 查看nftables规则
nft list ruleset

实践中有这样的情况:netstat显示0.0.0.0:3306 LISTEN,但远程连不上,最后发现是云厂商安全组未放行3306。因此排查连通性时,应先用本文命令确认监听,再用网络工具如telnet或nc从外部验证,最后查防火墙。

总结来说,Linux查看开放端口并非单一命令能全覆盖,netstat适合习惯兼容,ss适合高效首选,lsof适合进程关联。理解监听地址含义和防火墙层级,才能准确回答端口到底开没开。

linux端口查看netstat修改时间:2026-08-08 13:36:30

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。