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


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


1493
2017-09-07 06:26


起源


很多答案,甚至没有一个将此视为编程问题的答案。 - arnt


答案:


C:\> netstat -a -b

(加 -n 阻止它试图解析主机名,这将使它快得多)

注意丹麦人的建议 套装软件。看起来很有用!

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

-b  显示创建每个连接所涉及的可执行文件         听口。在某些情况下,众所周知的可执行文件主机         多个独立的组件,在这些情况下         创建连接所涉及的组件序列         或显示监听端口。在这种情况下可执行文件         name位于底部的[]中,顶部是它调用的组件,         等等,直到达到TCP / IP。请注意,此选项         可能很耗时,除非你有足够的,否则会失败         权限。

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

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


1673
2017-09-07 06:28



-o获得PID - Laurent K
和taskkill / PID <pid>然后使用/ F终止进程,如果合适的话。 - BitMask777
您可能必须以管理员身份运行命令行shell,否则可能会收到有关权限不足的错误消息。右键单击cmd.exe时,使用“以管理员身份运行”选项。 - Gruber
工作但需要提升权限。 Shift +右键单击命令图标 - >以管理员身份运行 - Christian Bongiorno
得到了PID - 让我们说它 1234  - 那你就可以用了 tasklist /fi "pid eq 1234" 找出该过程的名称和其他细节。 - Steve Chambers


Windows有一个原生GUI:

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

要么   resmon.exe, 或来自 任务管理器 性能标签

enter image description here


1615
2018-05-18 05:02



还显示绑定的防火墙状态(最后一列)。很实用。 - Raphael
@data,唯一的问题是这个程序的UI非常可怕。 - Pacerier
您需要成为管理员(或在该组中)才能运行此操作。 - KrishPrabakar
也可以从任务管理器的性能选项卡启动,至少在Windows 10中。(尚未检查其他版本。) - Mathieu K.
上面@ user4836454的注释不正确:资源监视器显示带有侦听器的端口,即使这些端口没有网络连接也是如此。只需查看“侦听端口”部分,而不是“TCP连接”部分。 - Jpsy


使用 套装软件 如果你想要一个GUI。这是微软收购的旧Sysinternals应用程序。


176
2017-09-07 06:38



这是我最好的选择,特别是因为所有进程都在同一个列表中,您可以通过右键单击直接关闭进程。 - Andreas Lundgren
此外,这不需要管理员privelges! - Janac Meena


netstat -aon | find /i "listening"

127
2017-09-07 06:32



我刚试过这个,它没有显示任何进程信息。 - J c
“没有显示任何流程信息”嗯?它显示了所有监听过程的进程ID。如果你需要 名称 过程,使用Brad的解决方案 - aku
我的坏,没有看到PID,因为我正在寻找进程名称。 - J c
@aku:请你看一下 stackoverflow.com/questions/23468107/... - Moby04
+1但请记住,如果您的Windows使用英语以外的语言运行,则必须将“收听”改为本机术语。例如。 netstat -aon | find /i "abhören" 对于德国人。 - Levit


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

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

使用“查找”命令可以过滤结果。 find / i“listening”将仅显示“Listening”的端口。注意,您需要/ i忽略Case,否则您将键入find“LISTENING”。 | find“port”将结果限制为仅包含特定端口号的结果。注意,在此基础上,它还将过滤在响应字符串中的任何位置具有端口号的结果。


61
2017-10-08 18:56



尝试在PowerShell v2.0中运行此功能的FWIW会产生错误 FIND: Parameter format not correct。您需要在查找条件后添加空格。这将离开你 netstat -aon | find /i "listening" | find "1234 "。 - self.
将上面的“端口”替换为您的端口,例如“5000” - joey
@自。即使在管道后面添加空格,我仍然会在PS 5.1中出现错误。你知道发生了什么吗? - Nicke Manarin
@NickeManarinin和@self首先从powershell更改为cmd(只需键入cmd并按Enter然后重做命令)或在powershell中使用此命令:netstat -aon | find / i“{back tick}“听{back tick}“”|找到“{back tick}“港口{back tick}“”(< - 注意逃脱的引用 - 请原谅这个词 back tick 因为我不能添加实际角色,因为它认为它是剪辑) - Tristan van Dam


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

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

    netstat -abno

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

    -b          显示创建每个连接所涉及的可执行文件             听口。在某些情况下,众所周知的可执行文件主机             多个独立的组件,在这些情况下             创建连接所涉及的组件序列             或显示监听端口。在这种情况下可执行文件             name位于底部的[]中,顶部是它调用的组件,             等等,直到达到TCP / IP。请注意,此选项             可能很耗时,除非你有足够的,否则会失败             权限。

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

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

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

  4. 直接查看进程名称。

注意:在任务管理器下查找进程

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

  2. 打开Windows任务管理器。

  3. 选择“进程”选项卡。

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

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

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


59
2017-11-08 01:49





获取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  - 这里的名称并不重要)被提取(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

42
2018-02-10 10:17



同意!这是唯一通过端口过滤并且不需要在您的计算机上提升权限的答案。最佳答案! - Koshera
真有帮助的解决方案 - Tayab Hussain


首先,我们找到我们需要消除的特定任务的进程ID,以便获得端口空闲

类型
netstat -n -a -o

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

现在输入

taskkill / F / PID 3312

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

注意:有时Windows不允许您直接在CMD上运行此命令,因此首先需要执行此步骤 从start->命令提示符(右键单击命令提示符,然后以管理员身份运行)


36
2017-08-23 15:25





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

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

netstat -ano | findStr "8080"

通过pid查找进程名称

tasklist /fi "pid eq 2216"

find process by TCP/IP port


33
2018-01-24 03:50





从windows中的pid获取端口号非常简单。

以下是步骤:

1)转到运行 - >键入cmd - >按回车键。

2)写下面的命令......

netstat -aon | findstr [port number]

(注意:不要包括方括号。)

3)按下输入...

4)然后cmd将为您提供在该端口上运行的服务的详细信息以及pid。

5)打开任务管理器并点击服务选项卡,并将pid与cmd的pid匹配,就是这样。


21
2018-05-30 06:36





获取与每个连接关联的所有拥有进程ID的列表:

netstat -ao |find /i "listening"

如果要杀死任何进程都有id并使用此命令,那么该端口将变为空闲

Taskkill /F /IM pidof a process

18
2018-04-17 14:38