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

时间:2008-09-07 06:26:13

标签: windows networking port

如何确定哪个进程正在侦听Windows上的端口?

33 个答案:

答案 0 :(得分:2047)

的PowerShell

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

CMD

 C:\> netstat -a -b

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

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

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

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

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

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

答案 1 :(得分:1866)

Windows有一个原生GUI:

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

运行 resmon.exe, 或者从 TaskManager 效果标签

enter image description here

答案 2 :(得分:204)

如果您需要GUI,请使用TCPView。这是微软收购的旧版Sysinternals应用程序。

答案 3 :(得分:155)

netstat -aon | find /i "listening"

答案 4 :(得分:92)

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

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

netstat -ano | findStr "8080"

按pid查找流程名称

tasklist /fi "pid eq 2216"

find process by TCP/IP port

答案 5 :(得分:72)

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

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

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

答案 6 :(得分:65)

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

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

    netstat -abno

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

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

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

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

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

  4. 直接查看进程名称。

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

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

    2. 打开Windows任务管理器。

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

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

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

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

答案 7 :(得分:48)

获取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 th 元素)并传递给以下命令

    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

答案 8 :(得分:40)

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

键入
netstat -n -a -o

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

现在输入

taskkill / F / PID 3312

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

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

答案 9 :(得分:22)

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

netstat -ao |find /i "listening"

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

Taskkill /F /IM pidof a process

答案 10 :(得分:22)

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

以下是步骤:

1)去跑步 - &gt;键入cmd - &gt;按回车。

2)编写以下命令......

netstat -aon | findstr [port number]

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

3)按回车键...

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

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

答案 11 :(得分:16)

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

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

如上所述here

答案 12 :(得分:13)

如果您想使用GUI工具执行此操作,则SysInternals TCPView

答案 13 :(得分:12)

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

@RunWith(classOf[PowerMockRunner]) @PrepareForTest(Array(classOf[XmlConverterA], classOf[XmlConverterB])) class TransfersServiceExceptionSpec { @Test def test() { } } 的默认输出由于某种原因不包括进程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
    

答案 14 :(得分:10)

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

netstat -anon | findstr 1234

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

答案 15 :(得分:9)

netstat -aonetstat -ab告诉您应用程序,但如果您不是管理员,则会收到“请求的操作需要提升”。

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

答案 16 :(得分:9)

输入命令:netstat -aon | findstr :DESIRED_PORT_NUMBER

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

此答案最初发布于this thread

答案 17 :(得分:8)

我推荐来自NirSoft的CurrPorts

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

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

答案 18 :(得分:7)

Netstat

  • -a显示所有连接和侦听端口
  • -b显示可执行文件
  • -n停止解析主机名(数字形式)
  • -o拥有过程

    netstat -bano | findstr“ 7002”

    netstat -ano> ano.txt

Currports工具有助于搜索和过滤

答案 19 :(得分:6)

netstat -aof | findstr :8080(为任何端口更改 8080)

答案 20 :(得分:5)

请按照以下工具操作: - 从 cmd : - C:\> netstat -anob 管理员权限。

http://technet.microsoft.com/en-us/sysinternals/bb896653 - Process Explorer

http://technet.microsoft.com/en-us/sysinternals/bb896645 - 处理转储

http://technet.microsoft.com/en-us/sysinternals/bb896644 - 端口监视器

全部来自sysinternals.com

如果您只是想知道每个流程下的流程运行和线程,我建议您了解wmic。精彩的cmd线工具,为您提供比您所知更多的东西。

例如: -

c:\> wmic process list brief /every:5

以上命令将每5秒简要显示所有进程列表。要了解更多信息,您可以使用Windows的/?命令,例如

c:\>wmic /?
c:\>wmic process /?
c:\>wmic prcess list /?

依此类推。 :)

答案 21 :(得分:5)

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

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

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

答案 22 :(得分:5)

对于使用Powershell的用户,请尝试Get-NetworkStatistics

> 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

答案 23 :(得分:4)

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

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

示例输出

>   TCP    0.0.0.0:8080           0.0.0.0:0              LISTENING         2920
   [tnslsnr.exe]
>   TCP    [::]:8080              [::]:0                 LISTENING         2920
   [tnslsnr.exe]

因此,在此示例中,tnslsnr.exe(OracleXE数据库)正在侦听端口8080。

快速解释
Select-String用于过滤相关行的netstat的冗长输出 -Pattern针对正则表达式测试每一行 -Context 0,1将为每个模式匹配输出0个前导行和1个尾随行。

答案 24 :(得分:4)

以编程方式,您需要iphlpapi.h中的内容,例如GetTcpTable2()。像MIB_TCP6ROW2这样的结构包含所有者PID。

答案 25 :(得分:4)

查找使用端口8000的pid

netstat -aon | findstr '8000'

要在Windows中终止该进程

taskkill /pid pid /f

其中pid是您从第一个命令获得的进程ID

答案 26 :(得分:3)

一个单线解决方案对我有帮助,只需用您的端口替换3000

$P = Get-Process -Id (Get-NetTCPConnection -LocalPort 3000).OwningProcess; kill $P.Id

答案 27 :(得分:2)

  1. 打开command prompt - start » run » cmd or start » All Programs » Accessories » Command Prompt

  2. 类型

    netstat -aon | findstr '[port_number]'

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

  1. 如果任何应用程序正在使用该端口,则将显示该应用程序的详细信息。列表最后一栏显示的数字是该应用程序的PID(进程ID)。记下这一点。
  2. 类型

    tasklist | findstr '[PID]'

用上面步骤中的数字替换[PID],然后按Enter。

  1. 将显示使用端口号的应用程序名称。

答案 28 :(得分:2)

万一某人需要同等的macOS,就是这样:

lsof -i tcp:8080

获得流程的PID之后,您可以使用以下方法将其杀死:

kill -9 <PID>

答案 29 :(得分:1)

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

mininet CLI api

答案 30 :(得分:1)

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

netstat -na | find "1234"

答案 31 :(得分:1)

您还可以使用以下命令检查保留的端口。例如,Hyper-V保留了一些端口。

netsh int ipv4 show excludedportrange protocol=tcp

答案 32 :(得分:0)

基于infokill的答案,对我来说,将它们合并到one command中很有用。您可以从cmd运行此命令,以获取有关在给定端口上侦听进程的信息(例如8080):

for /f "tokens=3 delims=LISTENING" %i  in ('netstat -ano ^| findStr "8080" ^| findStr "["') do tasklist /fi "pid eq %i"

或者如果您想杀死它:

for /f "tokens=3 delims=LISTENING" %i  in ('netstat -ano ^| findStr "8080" ^| findStr "["') do Taskkill /F /IM %i

您还可以将这些命令放入bat文件(它们会稍有不同-将%i替换为%%i):

文件portInfo.bat

for /f "tokens=3 delims=LISTENING" %%i  in (
    'netstat -ano ^| findStr "%1" ^| findStr "["'
) do (
    tasklist /fi "pid eq %%i"
)

文件portKill.bat

for /f "tokens=3 delims=LISTENING" %%i  in (
    'netstat -ano ^| findStr "%1" ^| findStr "["'
) do (
    Taskkill /F /IM %%i
)

然后从cmd中执行以下操作:

portInfo.bat 8080

portKill.bat 8080