你怎么能找出哪个进程正在侦听Windows上的一个端口?

你怎么能找出哪个进程正在侦听Windows上的一个端口?

C:\> netstat -a -b 

(添加-n停止它试图parsing主机名,这将使它快很多)

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

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

-b显示创build每个连接或侦听端口所涉及的可执行文件。 在某些情况下,众所周知的可执行文件会托pipe多个独立的组件,在这种情况下,会显示创build连接或侦听端口所涉及的组件顺序。 在这种情况下,可执行文件的名称在底部是[],最上面是它所调用的组件,直到到达TCP / IP为止。 请注意,此选项可能会耗费时间,并会失败,除非您拥有足够的权限。

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

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

Windows有一个本地GUI:

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

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

在这里输入图像描述

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

 netstat -aon | find /i "listening" 
  1. 打开命令提示符窗口(以pipe理员身份)从“开始\search框”input“cmd”,然后右键单击“cmd.exe”并select“以pipe理员身份运行”

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

    netstat -abno

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

    -b显示创build每个连接或侦听端口所涉及的可执行文件。 在某些情况下,众所周知的可执行文件会托pipe多个独立的组件,在这种情况下,会显示创build连接或侦听端口所涉及的组件顺序。 在这种情况下,可执行文件的名称在底部是[],最上面是它所调用的组件,直到到达TCP / IP为止。 请注意,此选项可能会耗费时间,并会失败,除非您拥有足够的权限。

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

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

  3. 在“本地地址”下find正在监听的端口

  4. 看看下面的进程名称。

注:要查找任务pipe理器下的进程

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

  2. 打开Windows任务pipe理器。

  3. select进程选项卡。

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

    • 如果您没有看到PID列,请点击查看/select列。 selectPID。

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

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

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

使用“查找”命令可以过滤结果。 找/我“聆听”将只显示“听”的端口。 请注意,您需要/我忽略大小写,否则您会inputfind“LISTENING”。 |查找“端口”将结果限制为仅包含特定端口号的结果。 请注意,在这个过程中,它也会过滤在响应string中任何地方都有端口号的结果。

获取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 

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

types
netstat -n -a -o

在Windows命令行提示符(cmd)执行这个命令后,select我认为最后一列假设这是3312的PID

现在input

taskkill / F / PID 3312

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

注意:有时窗口不允许你直接在CMD上运行这个命令,所以首先你需要从开始 – >命令提示符(右键单击命令提示符,并以pipe理员身份运行)

在Windows中从pid获取端口号非常简单。

以下是步骤:

1)转到运行 – >inputcmd – >按回车。

2)写下面的命令…

 netstat -aon | findstr [port number] 

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

3)按回车…

4)然后cmd会给你在该端口上运行的服务与pid的细节。

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

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

 netstat -ao |find /i "listening" 

如果想杀掉任何有id的进程并使用这个命令,那么这个port就变成了free

 Taskkill /F /IM pidof a process 

如果你想使用一个GUI工具来做到这一点SysInternals TCPView 。

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

这是不理想的,但是如果你使用sysinternals进程资源pipe理器,你可以去特定进程的属性,并看看TCP标签,看看他们是否使用你感兴趣的端口。一针和干草堆的东西,但也许它会帮助别人….

只要打开一个命令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 

这正如这里所提到的

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

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

这个答案最初是在这个post中发布的。

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

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

因此,你可以杀死一个在Windows的特定端口上运行的进程。

我推荐NirSoft的CurrPorts 。

CurrPorts可以过滤显示的结果。 TCPView没有这个function。

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

遵循以下工具: – 从cmd : – C:\> netstat -anob具有pipe理员权限的C:\> netstat -anob

http://technet.microsoft.com/en-us/sysinternals/bb896653 – 进程资源pipe理器

http://technet.microsoft.com/en-us/sysinternals/bb896645 – 进程转储

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

全部来自sysinternals.com

如果你只是想知道每个进程下的进程运行和线程,我build议学习wmic 。 奇妙的CMD线工具,它给你比你所知道的更多。

例子: –

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

以上命令将每5秒钟显示所有进程列表。 要知道更多,你可以去与/? 命令的窗口,例如,

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

等等等等。 🙂

使用Windows 10或Windows Server 2016上的PowerShell 5,运行Get-NetTCPConnection cmdlet。 我想这应该也适用于较旧的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 
  • 使用您要查找的属性将输出格式化为表格:

     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 
  • 如果您想查找进程的名称,请运行以下命令:

     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 

对于那些使用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 

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

 netstat -na | find "1234"