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

问题描述 投票:1796回答:28

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

windows networking port
28个回答
2084
投票

PowerShell

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

cmd

 C:\> netstat -a -b

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

注意丹麦人对TCPView的建议。它看起来非常有用!

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

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

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

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


23
投票

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

java.exe                      5312 Services                   0    130,768 K

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

netstat -ao |find /i "listening"

22
投票

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

以下是步骤:

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

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

Taskkill /F /IM pidof a process

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

3)按下输入...

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

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


16
投票

只需打开一个命令shell并输入:(说你的端口是123456)

netstat -aon | findstr [port number]

你会看到你需要的一切

标题是:

netstat -a -n -o | find "123456"

这就像 Proto Local Address Foreign Address State PID TCP 0.0.0.0:37 0.0.0.0:0 LISTENING 1111 提到的那样


13
投票

如果您想使用GUI工具来执行此操作,那就是here


12
投票

使用Windows 10或Windows Server 2016上的PowerShell 5,运行SysInternals TCPView cmdlet。我想它应该适用于较旧的Windows版本。

由于某种原因,Get-NetTCPConnection的默认输出不包括进程ID,这有点令人困惑。但是,您始终可以通过格式化输出来获取它。您要找的物业是Get-NetTCPConnection

  • 如果要查找正在侦听端口443的进程的ID,请运行以下命令: OwningProcess
  • 将输出格式化为具有您查找的属性的表: PS C:\> Get-NetTCPConnection -LocalPort 443 | Format-List LocalAddress : :: LocalPort : 443 RemoteAddress : :: RemotePort : 0 State : Listen AppliedSetting : OwningProcess : 4572 CreationTime : 02.11.2016 21:55:43 OffloadState : InHost
  • 如果要查找进程的名称,请运行以下命令: PS C:\> Get-NetTCPConnection -LocalPort 443 | Format-Table -Property LocalAddress, LocalPort, State, OwningProcess LocalAddress LocalPort State OwningProcess ------------ --------- ----- ------------- :: 443 Listen 4572 0.0.0.0 443 Listen 4572

10
投票

要找出哪个特定进程(PID)正在使用哪个端口:

PS C:\> Get-Process -Id (Get-NetTCPConnection -LocalPort 443).OwningProcess

Handles  NPM(K)    PM(K)      WS(K)     CPU(s)     Id  SI ProcessName
-------  ------    -----      -----     ------     --  -- -----------
143      15     3448      11024              4572   0 VisualSVNServer

其中1234是您的过程的PID。 [转到任务管理器 - >服务/进程选项卡以查找应用程序的PID]


9
投票

netstat -anon | findstr 1234 netstat -ao告诉你应用程序,但如果你不是管理员,你会得到“请求的操作需要提升”。

这不是理想的,但如果您使用sysinternals Process Explorer,您可以转到特定进程的属性并查看TCP选项卡,看看他们是否正在使用您感兴趣的端口。有点针和干草堆的东西,但也许它会帮助某人......


9
投票

输入命令:netstat -ab

例如,如果我想找到端口80:netstat -aon | findstr :DESIRED_PORT_NUMBER

这个答案最初发布在netstat -aon | findstr :80


9
投票

用netstat

  • -a显示所有连接和侦听端口
  • -b显示可执行文件
  • -n stop解析主机名(数字形式)
  • - 拥有过程 netstat -bano | findstr“7002” netstat -ano> ano.txt

this thread工具有助于搜索和过滤


8
投票

我推荐来自NirSoft的Currports

CurrPorts可以过滤显示的结果。 CurrPorts没有此功能。

注意:您可以右键单击进程的套接字连接,然后选择“关闭所选的TCP连接”(您也可以在TCPView中执行此操作)。这通常可以解决我在切换VPN后与Outlook和Lync之间的连接问题。使用CurrPorts,您还可以使用“/ close”参数从命令行关闭连接。


1887
投票

有一个Windows的原生GUI:

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

或运行qazxsw poi,或从任务管理器性能选项卡


5
投票

请遵循以下工具: - 来自cmd: - 具有管理员权限的TCPView

C:\> netstat -anob - Process Explorer

http://technet.microsoft.com/en-us/sysinternals/bb896653 - 流程转储

http://technet.microsoft.com/en-us/sysinternals/bb896645 - Port Monitor

全部来自sysinternals.com

如果您只想知道每个流程下的流程运行和线程,我建议您了解http://technet.microsoft.com/en-us/sysinternals/bb896644。精彩的cmd线工具,为您提供比您所知更多的东西。

示例: -

wmic

上面的命令将每5秒简要显示所有进程列表。要了解更多信息,您可以使用c:\> wmic process list brief /every:5 windows命令,例如,

/?

等等等等。 :)


5
投票

netstat -a -o显示在特定端口上运行的进程的PID。

请记住进程ID并转到任务管理器和服务或详细信息选项卡,然后结束具有相同PID的进程。

因此,您可以终止在Windows中的特定端口上运行的进程。


5
投票

对于那些使用Powershell的人,试试c:\>wmic /? c:\>wmic process /? c:\>wmic prcess list /?

Get-NetworkStatistics

4
投票

使用Powershell ...... ...这将是你的朋友(用你的端口号替换8080):

> Get-NetworkStatistics | where Localport -eq 8000


ComputerName  : DESKTOP-JL59SC6
Protocol      : TCP
LocalAddress  : 0.0.0.0
LocalPort     : 8000
RemoteAddress : 0.0.0.0
RemotePort    : 0
State         : LISTENING
ProcessName   : node
PID           : 11552

样本输出

 netstat -abno | Select-String -Context 0,1 -Pattern 8080

所以在这个例子中,tnslsnr.exe(OracleXE数据库)正在侦听端口8080。

快速解释 > TCP 0.0.0.0:8080 0.0.0.0:0 LISTENING 2920 [tnslsnr.exe] > TCP [::]:8080 [::]:0 LISTENING 2920 [tnslsnr.exe] 用于过滤相关线路的Select-String的冗长输出。 netstat针对正则表达式测试每一行。 -Pattern将为每个模式匹配输出0个前导线和1个尾随线。


4
投票

以编程方式,您需要来自-Context 0,1的东西,例如iphlpapi.h()。像GetTcpTable2这样的结构包含所有者PID。


4
投票

帮助我的单线解决方案是这个,只需用你的端口替换3000

MIB_TCP6ROW2


3
投票
  1. 打开$P = Get-Process -Id (Get-NetTCPConnection -LocalPort 3000).OwningProcess; kill $P.Id
  2. 类型 command prompt - start » run » cmd or start » All Programs » Accessories » Command Prompt

将[port_number]替换为您要检查的实际端口号,然后按Enter键。

  1. 如果任何应用程序正在使用该端口,那么将显示该应用程序的详细信息。列表最后一列显示的数字是该应用程序的PID(进程ID)。记下这一点。
  2. 类型 netstat -aon | findstr '[port_number]'

将[PID]替换为上述步骤中的数字,然后按Enter键。

  1. 您将看到使用您的端口号的应用程序名称。

1
投票

对于Windows,如果要查找侦听或连接到端口1234的内容,请在cmd提示符处执行以下命令:

tasklist | findstr '[PID]'

1
投票

使用下面的批处理脚本,它将进程名称作为参数,并为进程提供netstat输出。

netstat -na | find "1234"

206
投票

如果你想要一个GUI,请使用resmon.exe。这是微软收购的旧版Sysinternals应用程序。


160
投票

95
投票

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

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

netstat -aon | find /i "listening"

通过pid查找进程名称

netstat -ano | findStr "8080"

tasklist /fi "pid eq 2216"


72
投票

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

find process by TCP/IP port

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


65
投票
  1. 打开命令提示符窗口(以管理员身份)从“开始\搜索框”输入“cmd”,然后右键单击“cmd.exe”并选择“以管理员身份运行”
  2. 输入以下文本,然后按Enter键。 netstat -aon |find /i "listening" |find "port" -a显示所有连接和侦听端口。 -b显示创建每个连接或侦听端口所涉及的可执行文件。在某些情况下,众所周知的可执行文件承载多个独立组件,在这些情况下,将显示创建连接或侦听端口所涉及的组件序列。在这种情况下,可执行文件名在底部的[]中,顶部是它调用的组件,依此类推,直到达到TCP / IP。请注意,此选项可能非常耗时,并且除非您具有足够的权限,否则将失败。 -n以数字形式显示地址和端口号。 -o显示与每个连接关联的拥有进程ID。
  3. 在“本地地址”下找到您正在侦听的端口
  4. 直接查看进程名称。

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

  1. 请注意您正在查看的端口旁边的PID(进程标识符)。
  2. 打开Windows任务管理器。
  3. 选择“进程”选项卡。
  4. 查找在步骤1中执行netstat时记下的PID。 如果没有看到PID列,请单击“查看/选择列”。选择PID。 确保选中“显示所有用户的进程”。

48
投票

Get PID and Image Name

仅使用一个命令:

netstat -abno

其中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
  • 从每一行开始,提取PID(netstat -aon | findstr 9000 - 此处名称不重要)(PID是该行中的%ath元素)并传递给以下命令 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

41
投票

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

类型 netstat -n -a -o

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

现在输入

taskkill / F / PID 3312

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

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

© www.soinside.com 2019 - 2024. All rights reserved.