Windows 系统
在 Windows 中,最常用、最核心的命令是 netstat 和 PowerShell 的 Get-NetTCPConnection。

netstat 命令 (经典、通用)
netstat 是一个历史悠久的网络状态工具,功能强大。
基本语法:
netstat [-a] [-n] [-o] [-p protocol] [-b]
常用参数组合:
-
查看所有监听和已建立的连接:
(图片来源网络,侵删)netstat -an
-a: 显示所有连接和监听端口。-n: 以数字形式显示地址和端口号,不进行域名解析(速度更快,避免DNS查询失败)。- 输出示例:
TCP 192.168.1.100:5357 104.16.132.229:443 ESTABLISHED TCP 0.0.0.0:80 0.0.0.0:0 LISTENING UDP 192.168.1.100:5357 *:* - 状态说明:
LISTENING: 正在监听,等待连接(如 Web 服务器)。ESTABLISHED: 连接已建立,正在通信。TIME_WAIT: 连接已关闭,等待清理。CLOSE_WAIT: 远程端已关闭连接,本地端尚未关闭。
-
查看指定端口的占用情况:
netstat -ano | findstr "端口号"
-o: 显示进程 ID (PID)。| findstr "端口号": 管道传递给findstr命令,用于筛选特定端口。- 示例 (查看 80 端口):
netstat -ano | findstr ":80"
输出最后一列的数字就是 PID。
-
查看指定进程的端口占用:
netstat -ano | findstr "PID"
将所有连接及其 PID 列出,然后你可以根据 PID 来查找。
(图片来源网络,侵删)
PowerShell 命令 (现代、功能强大)
在较新的 Windows 系统中,PowerShell 是更推荐的工具,其输出更易于后续处理。
基本语法:
Get-NetTCPConnection [-State Listening] -LocalPort 端口号
常用命令:
-
查看所有监听端口:
Get-NetTCPConnection -State Listening
- 输出是一个结构化的表格,包含
LocalAddress,LocalPort,RemoteAddress,RemotePort,State,OwningProcess(PID) 等信息。
- 输出是一个结构化的表格,包含
-
查看指定端口的占用情况:
Get-NetTCPConnection -LocalPort 80 -State Listening
- 这比
netstat的写法更直观。
- 这比
-
结合
Get-Process查看进程名:Get-NetTCPConnection -LocalPort 80 | Get-Process
这个命令可以直接通过端口查到对应的进程详细信息,非常方便。
任务管理器 (图形化界面)
对于不习惯命令行的用户,任务管理器也可以查看端口。
- 按
Ctrl + Shift + Esc打开任务管理器。 - 切换到“性能”选项卡。
- 点击左侧的“网络”。
- 点击下方的“打开资源监视器”。
- 在“资源监视器”中,展开“网络活动” -> “TCP 连接”。
- 在这里你可以看到所有 TCP 连接,并可以根据“本地端口”或“PID”进行筛选。
Linux / macOS 系统
在 Linux 和 macOS (基于 Unix) 系统中,ss 是目前推荐使用的命令,因为它比传统的 netstat 更快、信息更全。netstat 仍然可用,但 ss 是首选。
ss 命令 (现代、快速)
基本语法:
ss [选项] [过滤]
常用命令:
-
查看所有 TCP 和 UDP 端口:
ss -tuln
-t: 只显示 TCP 端口。-u: 只显示 UDP 端口。-l: 只显示监听 (LISTENING) 端口。-n: 以数字形式显示地址和端口,不进行域名解析。- 输出示例:
State Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 511 0.0.0.0:80 0.0.0.0:* LISTEN 0 4096 [::]:22 [::]:* - 状态说明:
LISTEN: 正在监听。ESTABLISHED: 已建立连接。TIME_WAIT: 等待超时。CLOSED: 已关闭。
-
查看指定端口的占用情况:
ss -tuln | grep "端口号"
- 示例 (查看 80 端口):
ss -tuln | grep ":80"
- 示例 (查看 80 端口):
-
查看端口对应的进程:
ss -tulnp
-p: 显示进程 ID (PID) 和名称。- 输出示例:
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process LISTEN 0 511 0.0.0.0:80 0.0.0.0:* users:(("nginx",pid=1234,fd=6)) - 从输出中可以直接看到
pid=1234和进程名nginx。
netstat 命令 (传统、兼容性好)
netstat 在大多数 Linux/macOS 系统上依然可用,其用法与 Windows 类似。
常用命令:
-
查看所有监听端口:
netstat -tuln
-
查看带进程信息的监听端口:
netstat -tulpn
-p: 显示 PID 和程序名。
-
查看指定端口:
netstat -tuln | grep ":80"
lsof 命令 (功能极其强大)
lsof (List Open Files) 可以列出系统打开的所有文件,因为在 Unix/Linux 中,一切皆文件,网络端口也是文件。lsof 查看端口非常灵活。
常用命令:
- 查看指定端口的占用情况:
lsof -i :端口号
- 示例 (查看 80 端口):
lsof -i :80
- 输出示例:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME nginx 1234 root 6u IPv4 12345 0t0 TCP *:http (LISTEN) nginx 1235 www-data 6u IPv4 12345 0t0 TCP *:http (LISTEN) - 这个命令清晰地显示了哪个进程 (
COMMAND) 和哪个 PID 占用了端口。
- 示例 (查看 80 端口):
如何找到并终止占用端口的进程?
查看端口后,如果发现是未知或不需要的进程占用了端口,你可能需要终止它。
在 Windows 中:
- 找到 PID:使用
netstat -ano | findstr "端口号"或PowerShell命令找到 PID。 - 结束进程:
- 方法一 (命令行):打开命令提示符 (CMD) 或 PowerShell,使用
taskkill命令。taskkill /F /PID PID号
/F: 强制终止。/PID PID号: 替换为实际的 PID。
- 方法二 (图形界面):打开任务管理器,切换到“详细信息”选项卡,找到对应 PID 的进程,右键点击“结束任务”。
- 方法一 (命令行):打开命令提示符 (CMD) 或 PowerShell,使用
在 Linux / macOS 中:
- 找到 PID:使用
ss -tulpn | grep "端口号"或lsof -i :端口号找到 PID。 - 结束进程:使用
kill命令。- 普通终止:
kill PID号
- 强制终止 (如果普通方式无效):
kill -9 PID号
-9是SIGKILL信号,会强制立即终止进程,请谨慎使用。
- 普通终止:
总结对比
| 功能/系统 | Windows (推荐) | Linux / macOS (推荐) |
|---|---|---|
| 查看所有端口 | netstat -an 或 Get-NetTCPConnection |
ss -tuln |
| 查看监听端口 | netstat -ano 或 Get-NetTCPConnection -State Listening |
ss -tuln |
| 查看指定端口 | netstat -ano \| findstr "端口" |
ss -tuln \| grep "端口" |
| 查看端口进程 | netstat -ano (看PID) 或 Get-NetTCPConnection \| Get-Process |
ss -tulpn 或 lsof -i :端口 |
| 终止进程 | taskkill /F /PID PID号 |
kill -9 PID号 |
希望这份详细的总结能帮助你轻松应对各种端口查看和管理问题!
