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

Rea*_*nly 2040 windows port networking

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

Bra*_*son 2317

电源外壳

Get-Process -Id (Get-NetTCPConnection -LocalPort portNumber).OwningProcess
Run Code Online (Sandbox Code Playgroud)

CMD

 C:\> netstat -a -b
Run Code Online (Sandbox Code Playgroud)

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

注意Dane对TCPView的建议.看起来很有用!

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

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

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

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

  • -o获得PID (233认同)
  • 和taskkill/PID <pid>然后使用/ F终止进程,如果合适的话. (111认同)
  • 您可能必须以管理员身份运行命令行shell,否则可能会收到有关权限不足的错误消息.右键单击cmd.exe时,使用"以管理员身份运行"选项. (75认同)
  • 获得PID - 让我们说它是'1234` - 然后你可以使用`tasklist/fi"pid eq 1234"`来找出过程的名称和其他细节. (15认同)
  • @RodionSychev powershell 命令希望您将“portNumber”替换为您要查找的端口号。该错误表明“portNumber”不是数字。 (7认同)
  • 工作但需要提升权限.Shift +右键单击命令图标 - >以管理员身份运行 (6认同)
  • PowerShell 代码实际上不起作用,我收到此错误:Get-NetTCPConnection:无法处理参数“LocalPort”上的参数转换。无法将值“portNumber”转换为类型“System.UInt16[]”。错误:“无法将值“portNumber”转换为类型“System.UInt16”。错误:“输入字符串的格式不正确。” (2认同)

bco*_*rso 2049

有一个Windows的原生GUI:

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

运行 resmon.exe,或从TaskManager性能选项卡

在此输入图像描述

  • 还显示绑定的防火墙状态(最后一列).很实用. (36认同)
  • 以上@ user4836454的注释不正确:资源监视器显示带有侦听器的端口,即使这些端口没有网络连接也是如此.只需查看"侦听端口"部分而不是"TCP连接"部分. (9认同)
  • 您需要成为管理员(或在该组中)才能运行此操作. (7认同)
  • 也可以从任务管理器的性能选项卡启动,至少在Windows 10中.(尚未检查其他版本.) (5认同)
  • @bcorso,绑定到“[未指定地址](http://i.stack.imgur.com/s8TKi.png)”是什么意思? (3认同)
  • @Pacerier 单个以太网接口可以分配有多个 IP 地址(通常在服务器中)。“未指定”意味着它正在侦听服务器使用的任何地址的端口。相反将显示程序将响应的 IP 地址。 (2认同)

Dan*_*ane 216

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

  • 这是我最好的选择,特别是因为所有进程都在同一个列表中,您可以通过右键单击直接关闭进程. (8认同)
  • 此外,这不需要管理员privelges! (4认同)

aku*_*aku 191

netstat -aon | find /i "listening"
Run Code Online (Sandbox Code Playgroud)

  • +1但请记住,如果您的窗口使用英语以外的语言运行,则必须将"收听"更改为本机术语.例如`netstat -aon | 找/我"abhören"`为德语. (15认同)
  • 我尝试使用 PowerShell 在 W10 15063.729 上运行此命令时遇到错误:“FIND:参数格式不正确” (10认同)
  • 在我的情况下它没有工作可能是因为引号,但解决方案 netstat -aon | findstr LISTENING 完美无缺! (6认同)
  • 这个答案与“找出哪个进程 [name] 正在侦听 Windows 上的端口有什么关系?” (4认同)

Ram*_*rma 110

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

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

netstat -ano | findStr "8080"
Run Code Online (Sandbox Code Playgroud)

通过pid查找进程名称

tasklist /fi "pid eq 2216"
Run Code Online (Sandbox Code Playgroud)

通过TCP/IP端口查找进程


Nat*_*n24 76

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

netstat -aon | find /i "listening" |find "port"
Run Code Online (Sandbox Code Playgroud)

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

  • 尝试在PowerShell v2.0中运行此命令的FWIW会产生错误"FIND:参数格式不正确".您需要在查找条件后添加空格.这将留给你`netstat -aon | 找/我"听"| 找到"1234"`. (7认同)
  • 将上面的"port"替换为您的端口,例如"5000" (2认同)
  • @NickeManarinin和@self首先从powershell更改为cmd(只需键入cmd并按Enter然后重做命令)或在powershell中使用此命令:netstat -aon | find/i"`{back tick}`"listening` { back tick}`""| find"`{back tick}`"port` {back tick}`""(< - 注意转义的引号 - 请原谅`back tick`,因为我无法添加实际的字符,因为它认为它是一个剪辑) (2认同)

Cyb*_*org 69

  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.

    • 确保选中"显示所有用户的进程".


ROM*_*eer 50

获取PID和图像名称

仅使用一个命令:

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

其中,9000应该由你的端口号来代替.

输出将包含类似这样:

Image Name                     PID Session Name        Session#    Mem Usage
========================= ======== ================ =========== ============
java.exe                      5312 Services                   0    130,768 K
Run Code Online (Sandbox Code Playgroud)

说明:


如果你想跳过头部和返回命令提示符下,你可以使用:

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

输出:

java.exe                      5312 Services                   0    130,768 K
Run Code Online (Sandbox Code Playgroud)

  • 很好的答案,但如果不是,您应该将其更改为`findstr :9000`,您甚至会找到包含该号码的应用程序(例如,当您搜索“80”时,您也会在端口 80、800、8000 上找到应用程序)。 (2认同)

小智 44

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

输入
netstat -n -a -o

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

现在输入

taskkill/F/PID 3312

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

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


Mon*_*eed 27

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

netstat -ao |find /i "listening"
Run Code Online (Sandbox Code Playgroud)

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

Taskkill /F /IM PID of a process
Run Code Online (Sandbox Code Playgroud)


Nis*_*ani 24

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

以下是步骤:

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

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

netstat -aon | findstr [port number]
Run Code Online (Sandbox Code Playgroud)

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

3)按下输入...

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

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


Oli*_*ida 22

电源外壳

如果你想有一个很好的概述,你可以使用这个:

Get-NetTCPConnection -State Listen | Select-Object -Property *, `
    @{'Name' = 'ProcessName';'Expression'={(Get-Process -Id $_.OwningProcess).Name}} `
    | select ProcessName,LocalAddress,LocalPort
Run Code Online (Sandbox Code Playgroud)

然后你会得到一个像这样的表:

ProcessName              LocalAddress  LocalPort
-----------              ------------  ---------
services                 ::                49755
jhi_service              ::1               49673
svchost                  ::                  135
services                 0.0.0.0           49755
spoolsv                  0.0.0.0           49672
Run Code Online (Sandbox Code Playgroud)

对于UDP来说,它是:

Get-NetUDPEndpoint | Select-Object -Property *, `
   @{'Name' = 'ProcessName';'Expression'={(Get-Process -Id $_.OwningProcess).Name}} `
   | select ProcessName,LocalAddress,LocalPort
Run Code Online (Sandbox Code Playgroud)


小智 17

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

netstat -a -n -o | find "123456"
Run Code Online (Sandbox Code Playgroud)

你会看到你需要的一切

标题是:

 Proto  Local Address          Foreign Address        State           PID
 TCP    0.0.0.0:37             0.0.0.0:0              LISTENING       1111
Run Code Online (Sandbox Code Playgroud)

这就像这里提到的那样


Dav*_*ebb 14

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


bah*_*rep 13

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

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

  • 如果要查找正在侦听端口443的进程的ID,请运行以下命令:

    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
    
    Run Code Online (Sandbox Code Playgroud)
  • 将输出格式化为具有您查找的属性的表:

    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
    
    Run Code Online (Sandbox Code Playgroud)
  • 如果要查找进程的名称,请运行以下命令:

    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
    
    Run Code Online (Sandbox Code Playgroud)


Tec*_*nic 12

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

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

这个答案最初发布在这个帖子中.


Tal*_*mam 12

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

netstat -anon | findstr 1234
Run Code Online (Sandbox Code Playgroud)

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

  • 应该注意的是,您不需要将 `-n` 标志设置两次。`-ano` 就够了。 (2认同)

Blu*_*uds 11

Netstat -a显示所有连接和侦听端口-b显示可执行文件-n stop resolve hostnames(数字形式)-o拥有进程

netstat -bano | findstr "7002"

netstat -ano > ano.txt 
Run Code Online (Sandbox Code Playgroud)

Currports有助于搜索和过滤


Ton*_*roy 10

netstat -aonetstat -ab告诉你应用程序,但如果你不是管理员,你会得到"请求的操作需要提升".

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


Dav*_*sus 9

netstat -aof | findstr :8080 (任意端口改8080)


Jos*_*osh 8

我推荐NirSoft的CurrPorts.

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

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


Dan*_*ini 8

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

netsh int ipv4 show excludedportrange protocol=tcp
Run Code Online (Sandbox Code Playgroud)


小智 7

查找使用端口 8000 的 pid

netstat -aon | findstr '8000'
Run Code Online (Sandbox Code Playgroud)

在 Windows 中杀死该进程

taskkill /pid pid /f
Run Code Online (Sandbox Code Playgroud)

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


Min*_*int 7

如果有人像我一样需要 macOS 的等价物,这里是:

lsof -i tcp:8080

获得PID进程的结束后,您可以使用以下命令杀死它:

kill -9 <PID>


小智 6

请遵循以下工具: - 从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
Run Code Online (Sandbox Code Playgroud)

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

c:\> wmic /?
c:\> wmic process /?
c:\> wmic prcess list /?
Run Code Online (Sandbox Code Playgroud)

等等等等.:)


nis*_*sha 6

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

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

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


mik*_*ana 6

对于那些使用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
Run Code Online (Sandbox Code Playgroud)

  • 我不认为 Get-NetworkStatistics 是默认安装的。它返回以下内容: 术语“Get-NetworkStatistics”未被识别为 cmdlet 的名称 (2认同)

Ana*_*ABE 6

  1. 打开命令提示符-开始→ 运行cmd或开始菜单→ 所有程序附件命令提示符

  2. 类型

    netstat -aon | findstr '[port_number]'
    
    Run Code Online (Sandbox Code Playgroud)

将替换为[port_number]要检查并点击的实际端口号Enter

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

    tasklist | findstr '[PID]'
    
    Run Code Online (Sandbox Code Playgroud)

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

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

  • 在Win 10上:除非您用双引号替换简单的引号,否则步骤2和步骤4中的命令将不起作用。应该说netstat -aon | findstr“ [端口号]” (2认同)

Jps*_*psy 5

使用PowerShell ... ...这将是您的朋友(将8080替换为您的端口号):

 netstat -abno | Select-String -Context 0,1 -Pattern 8080
Run Code Online (Sandbox Code Playgroud)

样品输出

>   TCP    0.0.0.0:8080           0.0.0.0:0              LISTENING         2920
   [tnslsnr.exe]
>   TCP    [::]:8080              [::]:0                 LISTENING         2920
   [tnslsnr.exe]
Run Code Online (Sandbox Code Playgroud)

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

快速说明

  • Select-String用于过滤netstat相关行的冗长输出。
  • -Pattern 根据正则表达式测试每一行。
  • -Context 0,1 对于每个模式匹配,将输出0条前线和1条尾线。


Mic*_*kis 5

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


Ang*_*hev 5

一个对我有帮助的单线解决方案就是这个。只需将3000替换为您的端口即可:

$P = Get-Process -Id (Get-NetTCPConnection -LocalPort 3000).OwningProcess; kill $P.Id
Run Code Online (Sandbox Code Playgroud)

  • 您可能不想自动终止进程。我将把kill命令分开并解释它。不想让一些可怜的用户未经仔细考虑就粘贴粘贴。 (4认同)