如何找出 Windows 上正在侦听端口的进程?

如何找出 Windows 上正在侦听端口的进程?

答案

电源外壳

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

命令

C:\> netstat -a -b

(添加-n可以阻止它尝试解析主机名,这将使其变得更快。)

注意 Dane 对TCPView的建议。看起来非常有用!

-a显示所有连接和侦听端口。

-b显示创建每个连接或侦听端口所涉及的可执行文件。在某些情况下,众所周知的可执行文件包含多个独立的组件,在这些情况下,将显示创建连接或侦听端口所涉及的组件顺序。在这种情况下,可执行文件的名称在底部的 [] 中,在顶部是其调用的组件,依此类推,直到达到 TCP / IP。请注意,此选项可能很耗时,除非您拥有足够的权限,否则它将失败。

-n以数字形式显示地址和端口号。

-o显示与每个连接关联的拥有进程 ID。

Windows 有一个本机 GUI:

  • 开始菜单→ 所有程序附件系统工具资源监视器

运行 resmon.exe ,或从任务管理器的 “性能” 选项卡中。

在此处输入图片说明

如果要为此使用 GUI,请使用TCPView 。这是微软购买的旧Sysinternals应用程序。

对于 Windows:

netstat -aon | find /i "listening"

大多数答案中提到的 - b 开关要求您在计算机上具有管理特权。您实际上并不需要提升权限来获取进程名称!

在端口号(例如 8080)中找到正在运行的进程的 pid

netstat -ano | findStr "8080"

通过 pid 查找进程名称

tasklist /fi "pid eq 2216"

通过TCP / IP端口查找进程

如果运行以下命令,则可以获得更多信息:

netstat -aon | find /i "listening" |find "port"

使用 “查找” 命令可以过滤结果。 find /i "listening"将仅显示find /i "listening"端口。注意,您需要使用/i忽略大小写,否则将键入 find“LISTENING”。 | find "port"会将结果限制为仅包含特定端口号的结果。请注意,此操作还将过滤响应字符串中任意位置具有端口号的结果。

  1. 打开命令提示符窗口(以管理员身份)从 “开始 \ 搜索框” 中输入 “cmd”,然后右键单击 “cmd.exe” 并选择 “以管理员身份运行”

  2. 输入以下文本,然后按 Enter。

    netstat -abno

    -a显示所有连接和侦听端口。

    -b显示创建每个连接或侦听端口所涉及的可执行文件。在某些情况下,众所周知的可执行文件包含多个独立的组件,在这些情况下,将显示创建连接或侦听端口所涉及的组件顺序。在这种情况下,可执行文件的名称在底部的 [] 中,在顶部是其调用的组件,依此类推,直到达到 TCP / IP。请注意,此选项可能很耗时,除非您拥有足够的权限,否则它将失败。

    -n以数字形式显示地址和端口号。

    -o显示与每个连接关联的拥有进程 ID。

  3. 在 “本地地址” 下找到您正在监听的端口

  4. 直接在该名称下查看进程名称。

注意:要在任务管理器下找到该过程

  1. 注意您正在查看的端口旁边的 PID(进程标识符)。

  2. 打开 Windows 任务管理器。

  3. 选择进程选项卡。

  4. 查找在步骤 1 中执行 netstat 时记下的 PID。

    • 如果看不到 PID 列,请单击 “查看 / 选择列”。选择 PID。

    • 确保选中 “显示所有用户的进程”。

获取 PID 和图像名称

仅使用一个命令:

for /f "tokens=5" %a in ('netstat -aon ^| findstr 9000') do tasklist /FI "PID eq %a"

9000应该替换为您的端口号。

输出将包含以下内容:

Image Name                     PID Session Name        Session#    Mem Usage
========================= ======== ================ =========== ============
java.exe                      5312 Services                   0    130,768 K

说明:

  • 它从以下命令的输出遍历每一行:

    netstat -aon | findstr 9000
  • 从每一行中提取 PID( %a a - 这里的名称并不重要)(PID 是该行中的 5 元素)并传递给以下命令

    tasklist /FI "PID eq 5312"

如果要跳过 标题命令提示符的返回,可以使用:

echo off & (for /f "tokens=5" %a in ('netstat -aon ^| findstr 9000') do tasklist /NH /FI "PID eq %a") & echo on

输出:

java.exe                      5312 Services                   0    130,768 K

首先,我们找到该特定任务的进程 ID,我们需要消除该进程 ID 以释放端口:

类型

netstat -n -a -o

在 Windows 命令行提示符(cmd)中执行此命令后,选择我认为最后一列的 pid。假设是 3312。

现在输入

taskkill /F /PID 3312

现在,您可以通过键入netstat命令进行交叉检查。

注意:有时 Windows 不允许您直接在 CMD 上运行此命令,因此首先您需要执行以下步骤:

从开始菜单 -> 命令提示符(右键单击命令提示符,然后以管理员身份运行)

要获取与每个连接关联的所有拥有进程 ID 的列表,请执行以下操作:

netstat -ao |find /i "listening"

如果要杀死任何具有 ID 的进程并使用此命令,则该端口将变为空闲

Taskkill /F /IM PID of a process