如何找出 Windows 上哪个进程正在侦听某个端口?

有帮助吗?

解决方案

电源外壳

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

指令

 C:\> netstat -a -b

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

请注意 Dane 的建议 TCP视图. 。看起来非常有用!

-A 显示所有连接和监听端口。

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

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

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

其他提示

有一个适用于 Windows 的本机 GUI:

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

或者 跑步 resmon.exe, ,或来自 任务管理器 性能选项卡

enter image description here

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

netstat -aon | find /i "listening"

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

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

netstat -ano | findStr "8080"

通过pid查找进程名

tasklist /fi "pid eq 2216"

find process by TCP/IP port

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

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

使用“查找”命令可以过滤结果。find /i "listening" 将仅显示“正在监听”的端口。请注意,您需要 /i 来忽略大小写,否则您将键入 find“LISTENING”。|find“port”会将结果限制为仅包含特定端口号的结果。请注意,在此情况下,它还会过滤在响应字符串中任意位置具有端口号的结果。

  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。

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

获取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是 5th 该行中的元素)并传递给以下命令

    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

首先,我们找到该特定任务的进程 ID,我们需要消除该任务才能释放端口

类型
netstat -n -a -o

在Windows命令行提示(CMD)中执行此命令后,选择了我认为最后一列假定这是3312的PID

现在输入

任务终止 /F /PID 3312

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

笔记:有时Windows不允许您直接在CMD上运行此命令

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

步骤如下:

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

2)写入以下命令...

netstat -aon | findstr [port number]

(笔记:请勿包含方括号。)

3)按回车键...

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

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

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

netstat -ao |find /i "listening"

如果想杀死任何具有 id 的进程并使用此命令,以便端口空闲

Taskkill /F /IM pidof a process

只需打开命令 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

正如所提到的 这里

如果您想使用 GUI 工具来执行此操作,可以使用 系统内部 TCPView.

使用 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
    

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

netstat -anon | findstr 1234

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

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

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

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

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

这个答案最初发布于 这个线程.

我建议 当前端口 来自 NirSoft。

CurrPorts 可以过滤显示的结果。 TCP视图 没有这个功能。

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

网络统计

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

    netstat -bano | Findstr“ 7002”

    netstat -ano > ano.txt

电流 工具有助于搜索和过滤

请使用以下工具:- 从 指令 :- C:\> netstat -anob行政人员 特权。

http://technet.microsoft.com/en-us/sysinternals/bb896653 - 流程浏览器

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

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

全部来自 sysinternals.com

如果您只想了解进程运行情况以及每个进程下的线程,我建议了解 wmic. 。精彩的命令行工具,它为您提供的远远超出您的了解。

例子:-

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

上面的命令将每 5 秒简要显示所有进程列表。要了解更多信息,您可以直接前往 /? windows命令,例如,

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

等等等等。:)

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

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

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

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

使用 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 个尾随行。

以编程方式,您需要来自 iphlpapi.h, , 例如 获取TCP表2()。结构如 MIB_TCP6ROW2 包含所有者 PID。

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

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

  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. 您将看到正在使用您的端口号的应用程序名称。

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

netstat -na | find "1234"

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

@echo off
set procName=%1
for /f "tokens=2 delims=," %%F in ('tasklist /nh /fi "imagename eq %1" /fo csv') do call :Foo %%~F
goto End

:Foo
set z=%1
echo netstat for : "%procName%" which had pid "%1"
echo ----------------------------------------------------------------------

netstat -ano |findstr %z%
goto :eof

:End
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top