在命令行环境中查看端口开启状态是网络管理和系统维护中的常见操作,不同操作系统(如Windows、Linux、macOS)提供了不同的命令行工具来实现这一功能,以下将详细介绍各类系统中常用的端口查看命令、具体操作步骤及注意事项,帮助用户高效掌握端口状态监控方法。

Windows系统端口查看命令
Windows系统主要通过netstat、tcpview和PowerShell三种方式查看端口状态,其中netstat是最基础的命令行工具,适用于快速查询。
使用netstat命令
netstat是Windows内置的网络统计工具,通过不同参数可组合显示端口详细信息,常用参数如下:
-ano:显示所有连接、监听端口、进程ID(PID)及编号(a显示所有连接,n以数字形式显示地址和端口,o显示PID)。-anb:显示所有连接并包含可执行文件名称(需管理员权限)。-t:显示TCP连接,-u显示UDP连接,-p显示协议类型。
示例操作:
- 查看所有TCP和UDP端口:
netstat -ano
- 仅查看监听端口(
LISTENING状态):netstat -ano | findstr "LISTENING"
- 根据端口号过滤(如查看80端口):
netstat -ano | findstr ":80"
- 通过PID查找进程:
tasklist | findstr "PID号"
输出说明:
netstat的结果包含五列信息:协议(Proto)、本地地址(Local Address)、外部地址(Foreign Address)、状态(State)、PID,其中本地地址的0.0.0表示监听所有接口,0.0.1表示仅本地监听。

使用PowerShell命令
PowerShell提供更强大的对象化查询功能,适合复杂场景。
示例操作:
- 获取所有监听端口并显示进程名:
Get-NetTCPConnection -State Listen | Select-Object LocalAddress, LocalPort, OwningProcess
- 结合
Get-Process显示进程详情:Get-NetTCPConnection -State Listen | ForEach-Object { $process = Get-Process -Id $_.OwningProcess [PSCustomObject]@{ LocalPort = $_.LocalPort ProcessName = $process.ProcessName PID = $process.Id } }
使用第三方工具
如tcpview(微软Sysinternals工具)提供图形化界面,可实时查看端口和进程对应关系,适合需要动态监控的场景。
Linux/macOS系统端口查看命令
Linux和macOS系统基于Unix内核,主要使用ss、netstat和lsof命令查看端口状态,其中ss是推荐的高性能替代工具。
使用ss命令
ss是netstat的替代品,速度更快,默认显示TCP和UDP连接。
常用参数:

-t:TCP端口,-u:UDP端口,-l:仅显示监听端口,-n:数字形式,-p:显示PID。-a:显示所有端口,-4:IPv4,-6:IPv6。
示例操作:
- 查看所有监听端口:
ss -tulnp
- 查看指定端口(如22):
ss -tulnp | grep ":22"
- 显示TCP连接状态统计:
ss -s
输出说明:
ss的结果包含State(状态)、Local Address:Port(本地地址和端口)、Peer Address:Port(对端地址)、Process/PID(进程名和PID)等列。
使用netstat命令
在Linux中,netstat仍可用,但需安装net-tools包(部分系统默认未安装)。
示例操作:
netstat -tulnp # 查看监听端口 netstat -an | grep ESTABLISHED # 查看已建立的连接
使用lsof命令
lsof(list open files)可查看进程打开的文件,包括网络端口。
示例操作:
- 查看指定端口的进程:
lsof -i :80 # 查看80端口
- 查看所有监听端口:
lsof -i -P -n | grep LISTEN
端口状态解析
无论是Windows还是Linux,端口状态通常分为以下几类(以TCP为例):
| 状态 | 说明 | 常见场景 |
|------------|-------------------------------|------------------------------|
| LISTEN | 端口正在监听连接 | 服务启动后等待客户端连接 |
| ESTABLISHED| 连接已建立,数据传输中 | 客户端与服务端通信中 |
| TIME_WAIT | 连接关闭后等待资源释放 | 正常断开连接后的短暂状态 |
| CLOSE_WAIT | 对端关闭连接,本端未关闭 | 可能因程序异常导致资源未释放 |
| SYN_SENT | 发送连接请求等待响应 | 客户端尝试连接服务端 |
常见问题与解决
-
端口被占用但无法找到进程
- Windows:尝试
netstat -anb(需管理员权限)或使用Process Explorer工具。 - Linux:检查
/proc/PID/fd/目录下的文件描述符,或使用sudo lsof -i :端口号。
- Windows:尝试
-
如何关闭占用端口的进程
- Windows:通过任务管理器结束PID对应的进程,或命令行
taskkill /PID PID号 /F。 - Linux:使用
kill PID号或kill -9 PID号(强制终止)。
- Windows:通过任务管理器结束PID对应的进程,或命令行
相关问答FAQs
问题1:为什么使用ss命令比netstat更高效?
解答:ss命令是Linux内核提供的新工具,直接从netlink套接字获取信息,而netstat需遍历/proc文件系统,在端口数量较多时(如数万端口),ss的查询速度显著快于netstat,尤其是在高并发服务器环境中优势明显。
问题2:如何区分IPv4和IPv6端口的监听状态?
解答:在Linux中,使用ss -4l仅显示IPv4端口,ss -6l仅显示IPv6端口;Windows可通过netstat -ano查看地址格式,IPv6地址通常包含冒号(如[::]:80),或结合netstat -p ipv6参数过滤IPv6连接。
