菜鸟科技网

如何用DOS命令查询端口占用情况?

命令 工具 优点 缺点
netstat -ano CMD 最常用,系统自带,信息全面 输出格式稍显老旧
netstat -ano | findstr "端口号" CMD 快速查找特定端口,效率高 需要配合 findstr 命令
tasklist | findstr "PID号" CMD 根据 PID 查找具体进程名 需要配合 tasklist 命令
Get-NetTCPConnection -State Listen PowerShell 功能强大,输出为对象,易于筛选和导出 需要 PowerShell 5.0+

使用 netstat 命令 (最经典、最常用)

netstat 是一个网络统计工具,功能非常强大,可以显示网络连接、路由表、接口统计等信息。

如何用DOS命令查询端口占用情况?-图1
(图片来源网络,侵删)

查看所有监听端口

这是最常用的一组命令,可以看到所有正在被程序监听的端口。

netstat -ano

命令参数解释:

  • -a: 显示所有连接和监听端口。
  • -n: 以数字形式显示地址和端口号(不进行 DNS 解析),速度更快。
  • -o: 显示拥有该连接的进程 ID (PID)。

输出示例:

  协议  本地地址          外部地址        状态           PID
  TCP    0.0.0.0:80         0.0.0.0:0              LISTENING       4
  TCP    0.0.0.0:443        0.0.0.0:0              LISTENING       4
  TCP    127.0.0.1:3306     127.0.0.1:0            LISTENING       5160
  TCP    192.168.1.100:5357  192.168.1.1:5357       ESTABLISHED     1234
  UDP    0.0.0.0:5357       *:*                                    1234

解读:

如何用DOS命令查询端口占用情况?-图2
(图片来源网络,侵删)
  • 本地地址: IP地址:端口号0.0.0 表示监听所有可用的网络接口。
  • 外部地址: 对方连接的地址和端口,如果是 0.0.0:0*:0,表示是监听状态。
  • 状态: LISTENING 表示正在等待连接。ESTABLISHED 表示已建立连接。
  • PID: 进程 ID,这是找出哪个程序在使用该端口的关键。

快速查找特定端口

如果你只想知道某个特定端口(8080)是否被占用,可以使用 findstr 命令来过滤输出。

netstat -ano | findstr "8080"

输出示例:

  TCP    0.0.0.0:8080       0.0.0.0:0              LISTENING       8888

这行输出告诉我们,8080 端口正在被 PID 为 8888 的进程监听。

根据进程 ID 查找进程名

知道了 PID 之后,你可以使用 tasklist 命令来查看这个 PID 对应的进程名(.exe 文件)。

如何用DOS命令查询端口占用情况?-图3
(图片来源网络,侵删)
tasklist | findstr "PID号"

示例: 假设上一步查到的 PID 是 8888,那么命令就是:

tasklist | findstr "8888"

输出示例:

java.exe                  8888 Console                    1     56,524 K

这告诉我们,占用 8080 端口的是 java.exe 进程。


使用 PowerShell 命令 (更现代、更强大)

在 Windows 10/11 和 Windows Server 2025 及更高版本中,PowerShell 是更推荐的工具,它的命令可以输出结构化对象,方便后续处理。

查看所有监听的 TCP 端口

Get-NetTCPConnection -State Listen

命令参数解释:

  • -State Listen: 只显示处于“监听”状态的连接。
  • 这个命令会返回一个对象,其中包含了 LocalAddress, LocalPort, OwningProcess (PID) 等丰富的属性。

输出示例:

LocalAddress LocalPort RemoteAddress RemotePort State      AppliedSetting OwningProcess
------------ --------- --------------- ---------- ----------- --------------- -------------
0.0.0.0     80        0.0.0.0         0          Listen     Internet        4
0.0.0.0     443       0.0.0.0         0          Listen     Internet        4
127.0.0.1   3306      0.0.0.0         0          Listen     Internet        5160

查找特定端口并获取进程信息

PowerShell 的优势在于可以将管道()和 Where-Object 结合使用,实现更灵活的筛选。

查找特定端口(8080):

Get-NetTCPConnection -State Listen | Where-Object {$_.LocalPort -eq 8080}

查找特定端口并显示进程名(一行搞定): 这是 PowerShell 最方便的地方,我们可以通过管道将 PID 传递给 Get-Process

Get-NetTCPConnection -State Listen | Where-Object {$_.LocalPort -eq 8080} | ForEach-Object {Get-Process -Id $_.OwningProcess}

输出示例:

Handles NPM(K) PM(K) WS(K) CPU(s) Id   SI ProcessName
------- ------ ----- ----- ------ --   -- -----------
   123      5  56000  120000   5.5 8888 1          java

这直接告诉你,8080 端口被 java 进程(PID: 8888)占用。


如何关闭占用端口的进程?

当你找到占用端口的进程后,如果需要关闭它,可以使用 taskkill 命令。

语法:

taskkill /PID 进程ID /F

参数解释:

  • /PID: 指定要终止的进程 ID。
  • /F: 强制关闭,即使程序没有响应也强制关闭,建议在必要时使用。

示例: 要关闭上面例子中 PID 为 8888 的 Java 进程:

taskkill /PID 8888 /F

注意: 强行终止进程可能会导致数据丢失或程序异常,请谨慎操作,在执行前,请确保你知道这个进程是什么,以及关闭它是否会影响系统。

总结与建议

  • 快速查询: 在 CMD 中使用 netstat -ano | findstr "端口号" 是最快的方法。
  • 全面了解: 在 CMD 中使用 netstat -ano 查看所有端口,再结合 tasklist 查找进程名。
  • 现代脚本/高级用户: 强烈推荐使用 PowerShell,其命令更简洁、功能更强大,输出更易于处理和自动化,特别是 Get-NetTCPConnection | ForEach-Object {Get-Process -Id $_.OwningProcess} 这种链式操作非常高效。
分享:
扫描分享到社交APP
上一篇
下一篇