如果你想给某个程序单独分配一个端口,那先搞清楚「这个 TCP 或 UDP 端口被谁监听」就很有必要。举个例子:你想改 MySQL 的默认监听端口,那第一步就得确认准备用的那个端口没被别的进程占着。反过来,如果你只是想知道当前哪个活动进程占用了哪个 TCP/UDP 端口,这篇教程也能帮你排查网络问题、发现潜在安全隐患、优化系统性能。

方法一:用命令提示符和 netstat

想揭开 Windows 里「端口号背后是谁」,最省事的第一招就是 netstat 命令。它是个命令行工具,用来显示网络协议统计信息。用法如下。

  • 先打开命令提示符:

在 Windows 开始菜单里搜 CMD,或者按 Win + X 后选「终端」。

  • 运行 netstat:

在命令提示符里执行下面这条命令,列出所有活动连接和监听端口:

```Bash/Shell netstat -ano

- **找出对应进程:**

列表里会显示本地地址(Local Address)以及它用的端口号。想知道哪个进程占了哪个端口,记下「PID」那一列对应的进程标识符(PID)即可。

![在 Windows CMD 里使用 netstat](/media/editor/Use-netstat-in-Windows-CMD_20261003172732407983.png  "Use netstat in Windows CMD")

- **用 PID 反查进程或应用:**

拿到某个 TCP/UDP 端口对应的 PID 之后,就能顺着它找到对应是哪个应用或服务了。语法如下:

tasklist /fi "pid eq PID"

把上面命令里的 PID 换成你要查的那个。举个例:前面截图里端口 **135** 对应的 PID 是 **1632**,那么查它背后是哪个服务或进程,就写成:

```Bash/Shell
tasklist /fi "pid eq 1632"

用 CMD 根据 PID 找出占用端口的服务/程序

再进一步:如果你已经知道端口号,那就不用把监听端口全列一遍,直接用下面这条命令就能查到这个端口号关联的 PID:

netstat -ano | findStr "PORT"

示例: 把 PORT 换成你想查的具体端口号:

```Bash/Shell netstat -ano | findStr "135"

![用命令查出 PID](/media/editor/Find-PID-using-command_20261003172810176841.png "Find PID using command")

- **在任务管理器里核对:**

不想碰命令行的人,也可以用任务管理器。按 **Ctrl + Shift + Esc** 打开任务管理器,切到「**详细信息**」标签,在「**搜索框**」里输入端口对应的 PID,就能揪出占着它的应用或进程。

![在 Windows 任务管理器中按 PID 查找](/media/editor/FInd-PID-in-Windows-Task-Manager_20261003172830149652.png  "FInd PID in Windows Task Manager")

## 方法二:用 PowerShell 的 Get-NetTCPConnection

除了命令提示符,用 PowerShell 命令同样能拿到 TCP 和 UDP 端口详情。按 **Win + X**,选「Windows PowerShell(管理员)」或「终端(管理员)」打开 PowerShell 窗口,然后运行下面的命令,查出所有 TCP 监听端口。

- **列出所有 TCP 端口和进程号**

```Bash/Shell
Get-NetTCPConnection

用 PowerShell 获取 TCP 端口信息

  • 列出所有 UDP 端口、关联的本地地址、进程号等等……

```Bash/Shell Get-NetUDPEndpoint | Select-Object LocalAddress,LocalPort,RemoteAddress,RemotePort,OwningProcess

![获取 UDP 端口详情](/media/editor/Get-UDP-ports-details_20261003173146322183.png "Get UDP ports details")

- **查某个 TCP 连接端口的具体信息**

Get-Process -Id (Get-NetTCPConnection -LocalPort YourPORT).OwningProcess

**注意:** 把 **YourPORT** 换成你要查的端口号

**示例**:

```Bash/Shell
Get-Process -Id (Get-NetTCPConnection -LocalPort 135).OwningProcess
  • 查某个 UDP 端口的具体信息:
Get-Process -Id (Get-NetUDPEndpoint -LocalPort YourPORT ).OwningProcess

在 PowerShell 中查看指定 TCP 连接端口的详情

方法三:用资源监视器

这个方法完全不碰命令行,改用 Windows 图形化的资源监视器——它一样能显示网络相关信息,包括端口细节。操作如下。

  • 打开资源监视器:

按 Win + R 调出「运行」对话框,输入「resmon」回车。

打开 Windows 资源监视器

  • 切到网络:

资源监视器打开后,点顶部的「网络」标签。

  • 查看监听端口:

向下滚到「监听端口」区域,展开它,找到你要的端口号。这里不光有端口,还能看到 PID、占用该端口的服务,以及地址和防火墙状态等信息。

在 Windows 资源监视器中查看端口

方法四:用 TCPView 图形界面工具

  • 下载并运行 TCPView:

TCPView 是个小巧的绿色 Windows 程序,实时列出系统上所有 TCP 和 UDP 端点的详情——包括本地/远端地址,以及 TCP 连接状态——算是最直观的一种方式。

它可以直接从微软的 Sysinternals 网站下载,那儿专门托管各种高级系统工具。

比起 Windows 自带的 netstat 命令行工具,TCPView 能给出的信息更丰富。另外,下载下来的 TCPView 压缩包里还附带了 Tcpvcon——一个功能相同、但走命令行的版本。

  • 从官方页面(链接)下载 TCPView 压缩包。
  • 右键下载到的文件,解压。
  • 运行 TCPView 可执行文件,就能实时看到所有打开的 TCP 和 UDP 连接。

解压 TCPView 压缩包(来自 Sysinternals)

  • 用 TCPView 识别进程、TCP 和 UDP 端口:

在列表里找到目标端口号对应的进程,进程名及相关信息就会显示出来。

用 TCPView 查看 TCP 和 UDP 端口详情

老版本 TCPView 还能在 Windows Server 2008、Vista、XP 上运行。 当前版本的 TCPView 已要求 Windows 8.1 及以上(含 Server 2012 R2 及以上),在老系统上请改用旧版本。

收尾!

搞清楚系统上哪些进程在监听 TCP/UDP 端口,对网络管理和排障都很有用。上面给了好几种办法:喜欢命令行就用 Netstat,想看得更直观就上 TCPView 这类专门工具,都能让你快速定位 Windows 上活动端口的详情。用哪种,完全看你自己的习惯和需求,把网络排查做得顺心就好。