在网络安全管理和系统运维中,检查开放的端口是识别服务暴露面、排查潜在风险的基础操作,不同操作系统和场景下,检查开放端口的命令各有侧重,本文将详细介绍常用命令及其使用方法,涵盖Windows、Linux/macOS系统,以及针对特定协议的深度检查工具。

Windows系统常用端口检查命令
Windows系统提供了多种命令行工具用于端口检查,适合不同需求场景。
netstat命令
netstat是Windows内置的传统网络状态工具,功能全面,支持查看TCP、UDP端口状态及连接详情。
- 基本语法:
netstat [参数] - 常用参数:
-a:显示所有连接和监听端口;-n:以数字形式显示地址和端口,避免DNS解析,加快速度;-t:仅显示TCP连接;-u:仅显示UDP连接;-p:显示进程ID(PID)和进程名(需管理员权限);-b:显示创建每个连接的组件(需管理员权限)。
- 示例:
- 查看所有TCP/UDP连接:
netstat -an - 查看监听端口及对应进程:
netstat -ano | findstr "LISTENING" - 查看特定端口(如80端口)状态:
netstat -ano | findstr ":80"
- 查看所有TCP/UDP连接:
Get-NetTCPConnection(PowerShell)
PowerShell提供了更现代化的网络连接管理命令,支持对象化输出,便于后续处理。
- 基本语法:
Get-NetTCPConnection [参数] - 常用参数:
LocalPort:筛选本地端口;State:筛选连接状态(如Listen、Established);IncludeProcess:显示进程信息。
- 示例:
- 查看所有监听端口及进程:
Get-NetTCPConnection -State Listen | Select-Object LocalAddress, LocalPort, OwningProcess - 通过PID查找进程名:
Get-Process -Id (Get-NetTCPConnection -LocalPort 80).OwningProcess
- 查看所有监听端口及进程:
Test-NetConnection(PowerShell)
用于测试目标主机的端口连通性,适合快速检查端口是否可访问。

- 基本语法:
Test-NetConnection -ComputerName <主机名> -Port <端口号> - 示例:
Test-NetConnection -ComputerName 192.168.1.1 -Port 443,返回端口是否开放及网络延迟等信息。
Linux/macOS系统常用端口检查命令
Linux/macOS系统下,ss和netstat是主流工具,其中ss因性能更优逐渐替代netstat。
ss命令(推荐)
ss是Linux内核提供的新工具,查询速度更快,支持显示更多网络统计信息。
- 基本语法:
ss [参数] - 常用参数:
-t:TCP端口;-u:UDP端口;-l:仅显示监听端口;-n:数字形式显示地址和端口;-p:显示进程ID和命令名;-a:显示所有端口。
- 示例:
- 查看所有监听端口:
ss -tulnp - 查看特定端口(如22端口):
ss -tulnp | grep ":22"
- 查看所有监听端口:
netstat命令(兼容性更好)
在Linux/macOS中,netstat参数与Windows类似,但默认可能未安装(需通过net-tools包安装)。
- 示例:
netstat -tulnp | grep ":3306"(查看MySQL的3306端口状态)。
lsof命令
lsof(list open files)可查看进程打开的文件,包括网络端口。

- 基本语法:
lsof -i [协议]:[端口号] - 示例:
- 查看监听80端口的进程:
lsof -i :80 - 查看所有TCP端口:
lsof -i TCP
- 查看监听80端口的进程:
跨平台及高级端口检查工具
nmap(网络探测工具)
nmap是功能强大的端口扫描工具,支持端口状态探测、服务识别、脚本扫描等。
- 基本语法:
nmap [参数] <目标IP/域名> - 常用参数:
-sT:TCP连接扫描(全扫描);-sU:UDP扫描;-sS:TCP SYN扫描(半扫描,需root权限);-p:指定端口范围(如-p 1-1000);-O:操作系统检测;-sV:服务版本检测。
- 示例:
- 扫描目标主机的开放端口:
nmap 192.168.1.1 - 扫描特定端口范围并显示服务版本:
nmap -sV -p 80,443,8080 192.168.1.1
- 扫描目标主机的开放端口:
telnet/nc(netcat)
快速测试端口连通性,适合简单验证。
- telnet:
telnet <目标IP> <端口号>(如telnet 192.168.1.1 80) - nc:
nc -zv <目标IP> <端口号>(如nc -zv 192.168.1.1 22)
端口状态说明
| 状态 | 说明 |
|---|---|
| LISTEN | 端口处于监听状态,等待连接请求(如服务端开放端口) |
| ESTABLISHED | 已建立连接,数据可传输(如客户端已连接到服务端) |
| TIME_WAIT | 连接关闭后等待一段时间,确保数据传输完成(常见于TCP连接) |
| CLOSED | 端口未开放或连接已关闭 |
注意事项
- 权限要求:部分命令(如Windows的
netstat -b、Linux的ss -p)需要管理员/root权限才能显示进程信息。 - 端口范围:0-1023为知名端口(需特殊权限),1024-49151为注册端口,49152-65535为动态/私有端口。
- 防火墙影响:防火墙可能阻止端口访问,检查端口时需确认防火墙规则。
相关问答FAQs
Q1: 为什么使用ss命令比netstat更高效?
A1: ss命令直接从Linux内核获取网络套接字信息,而netstat需要通过/proc文件系统解析数据,因此在处理大量连接时,ss的查询速度更快,资源占用更低,尤其适合高并发场景。
Q2: 如何判断端口被哪个程序占用?
A2:
- Windows:使用
netstat -ano | findstr ":端口号"获取PID,再通过tasklist | findstr "PID"或任务管理器查看进程名; - Linux/macOS:使用
ss -tulnp | grep ":端口号"或lsof -i :端口号直接显示进程信息。
若需终止占用进程,可使用taskkill /PID PID号 /F(Windows)或kill -9 PID号(Linux)。
