Linux系统如何查看本地端口是否打开的详细操作步骤呢?

在Linux系统中,端口是网络通信的入口,服务是否正常运行、网络连接是否正常,都与端口状态密切相关,查看本地端口是否打开,通常需要确认两个层面:一是服务是否正在监听该端口(进程监听),二是防火墙是否允许该端口的流量通过(策略放行),本文将详细介绍多种查看端口状态的方法,涵盖命令行工具、防火墙检查及端口连通性测试。

linux如何查看本地端口是否打开

使用netstat命令(传统工具)

netstat是Linux系统中经典的网络状态查看工具,尽管在较新系统中逐渐被ss替代,但仍因其广泛的兼容性被使用,通过netstat可以查看端口监听状态、连接状态及关联进程信息。

基本语法

netstat [选项]

常用参数及作用

参数 作用
-t 显示TCP端口
-u 显示UDP端口
-l 仅显示监听状态的端口
-p 显示占用端口的进程ID(PID)和程序名
-n 以数字形式显示地址和端口,避免DNS解析,加快查询速度

示例

查看所有监听的TCP和UDP端口,并显示关联进程:

netstat -tulnp

输出结果解析:

  • Proto:协议类型(TCP/UDP)
  • Local Address:本地IP地址和端口(0.0.0表示监听所有IP,0.0.1表示仅本地监听)
  • State:端口状态(LISTEN表示监听中)
  • PID/Program name:占用端口的进程ID和程序名(如nginx: worker process

若需查看特定端口(如80端口)是否监听:

netstat -tulnp | grep :80

使用ss命令(推荐,更高效)

ssiproute2工具包的一部分,作为netstat的替代品,ss在查询大量连接时性能更优,输出信息也更简洁。

基本语法

ss [选项]

常用参数及作用

参数 作用
-t 显示TCP端口
-u 显示UDP端口
-l 仅显示监听端口
-n 数字形式显示,避免DNS解析
-p 显示进程ID和程序名
-a 显示所有端口(包括监听和非监听)

示例

查看所有监听的TCP/UDP端口及进程:

ss -tulnp

输出结果与netstat类似,但列更清晰,

  • State:端口状态(LISTENESTABLISHED等)
  • Recv-Q/Send-Q:接收队列和发送队列长度
  • Local Address:Port:本地IP和端口
  • Process:进程名和PID

过滤特定端口(如22端口):

ss -tulnp | grep :22

使用lsof命令(通过文件描述符查看)

lsof(list open files)用于列出系统打开的文件,包括网络连接、设备文件等,通过lsof可以查看指定端口被哪个进程占用。

基本语法

lsof -i :端口号

示例

查看8080端口占用情况:

lsof -i :8080

输出结果:

linux如何查看本地端口是否打开

  • COMMAND:进程名(如java
  • PID:进程ID
  • USER:进程所有者
  • FD:文件描述符(IPv6IPv4表示协议类型)
  • TYPE:网络类型(IPv4IPv6
  • DEVICE:设备标识
  • SIZE/OFF:文件大小
  • NODE:节点标识
  • NAME:端口和协议(如*:8080 (LISTEN)

若端口未被占用,则输出为空。

使用telnet或nc测试端口连通性

netstatss主要用于查看端口监听状态,而telnetnc(netcat)可用于测试本地或远程端口是否可达(即服务是否响应)。

使用telnet

telnet 本地IP 端口号

示例:测试本地80端口是否可访问

telnet localhost 80
  • 若端口开放,显示Connected to localhost.,并进入交互界面;
  • 若端口关闭,显示Connection refused

使用nc

nctelnet更灵活,支持多种模式,安装方式:

  • CentOS:yum install nc
  • Ubuntu:apt install netcat

基本语法:

nc -zv 本地IP 端口号

参数说明:

  • -z:扫描模式,不传输数据,仅连接测试
  • -v:显示详细输出

示例:测试3306端口

nc -zv localhost 3306

成功输出:Connection to localhost 3306 port [tcp/mysql] succeeded!
失败输出:Connection refused

检查防火墙状态(端口是否被阻止)

即使服务正在监听端口,若防火墙未开放该端口,外部仍无法访问,需根据系统使用的防火墙工具进行检查。

firewalld(CentOS 7+/RHEL 7+)

查看已开放的端口:

firewall-cmd --list-ports

查询特定端口是否开放(如8080/tcp):

linux如何查看本地端口是否打开

firewall-cmd --query-port=8080/tcp

返回yes表示开放,no表示未开放。

ufw(Ubuntu/Debian)

查看防火墙状态及规则:

ufw status

输出示例:

Status: active
To                         Action      From
--                         ------      ----
80/tcp                     ALLOW       Anywhere
8080/tcp                   ALLOW       Anywhere

iptables(传统防火墙)

查看所有规则(-L列出规则,-n数字形式,-v显示详细信息):

iptables -L -n -v

关注ACCEPT规则的端口,例如ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:80表示允许80端口访问。

常用端口查看命令对比

命令 适用场景 优点 缺点
netstat 传统系统,兼容性需求高 参数直观,输出易理解 性能较差,新系统逐渐弃用
ss 新系统(CentOS 7+/Ubuntu 16.04+) 高效,输出简洁,支持更多过滤 参数较netstat复杂
lsof 查看端口占用进程 精准定位进程,支持文件描述符 仅显示监听端口,不区分连接状态
telnet/nc 测试端口连通性 直观反映端口是否可达 需额外安装,仅测试连通性

注意事项

  1. 端口状态区分LISTEN表示服务正在监听,等待连接;ESTABLISHED表示已有连接建立;CLOSED表示端口未开启。
  2. 防火墙优先级:即使服务监听端口,若防火墙阻止,仍无法访问,需结合防火墙工具检查。
  3. 系统差异:不同Linux发行版默认工具不同(如CentOS用firewalld,Ubuntu用ufw),需根据系统选择命令。

相关问答FAQs

Q1:为什么端口显示“LISTEN”,但外部设备仍无法连接?
A:可能原因有两个:一是防火墙未开放该端口(如firewalld、ufw或iptables阻止了流量),二是服务监听的IP地址非0.0.0(如仅监听0.0.1,则仅本地可访问),可先通过telnet 本地IP 端口测试本地连通性,再检查防火墙规则,确保服务监听地址为0.0.0或正确绑定公网IP。

Q2:如何查看所有已开放的端口及对应服务列表?
A:结合ssgrep可快速整理,查看所有监听端口及对应服务(过滤掉PID和内核线程):

ss -tulnp | grep -v "kernel" | awk '{print $5, $7}' | sort | uniq

输出格式为“IP:端口 进程名”,便于快速定位服务,若需更详细的服务信息(如端口号对应的服务名称),可结合/etc/services文件(如grep ":80" /etc/services查看80端口对应的标准服务名)。

原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/29456.html

(0)
酷番叔酷番叔
上一篇 2025年9月24日 10:12
下一篇 2025年9月24日 10:36

相关推荐

  • 如何安全下载Linux内核源代码?

    使用包管理器下载(推荐)此方法通过系统自带的包管理工具获取内核源码,自动处理依赖和版本匹配,适合大多数用户,步骤:更新软件包列表确保本地仓库信息最新:sudo apt update # Debian/Ubuntusudo dnf update # Fedora/CentOS Streamsudo yum upd……

    2025年7月15日
    5000
  • 硬盘能直接安装Linux吗

    为什么选择硬盘安装?硬盘安装Linux(又称”无介质安装”)适合以下场景:无可用U盘或光驱需快速重装/多系统切换大文件传输速度远超USB(速度提升3-5倍)特殊设备(如仅剩单个USB口被键鼠占用)风险预警:操作涉及分区和引导,误操作可能导致数据丢失!务必提前备份重要文件,准备工作清单项目要求工具推荐操作系统Wi……

    2025年8月4日
    3600
  • 如何用init 3优化Linux服务器?

    进入init 3的三种方法方法1:使用telinit命令(推荐)sudo telinit 3原理:telinit是切换运行级别的标准命令,向init进程发送指令,效果:系统立即终止图形界面(如GNOME/KDE),切换到纯命令行终端,验证:执行who -r查看当前运行级别(显示run-level 3),方法2……

    2025年6月13日
    6300
  • linux如何停止c程序

    Linux中,可以使用kill命令停止C程序,需先获取其进程ID(P

    2025年8月10日
    3700
  • 如何启动Linux桌面?

    前提条件已安装 Linux 系统确保计算机已安装支持图形界面的 Linux 发行版(如 Ubuntu、Fedora、Debian),验证方法:开机后若看到命令行界面(黑屏白字),需额外安装桌面环境(见下文),确认桌面环境已安装主流桌面环境:GNOME(Ubuntu默认)、KDE Plasma(Kubuntu……

    2025年6月26日
    4600

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN

关注微信