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


当前回答

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

由于某种原因,Get-NetTCPConnection的默认输出不包含进程ID,这有点令人困惑。然而,您总是可以通过格式化输出来获得它。您要查找的属性是OwningProcess。

如果要查找在端口443上侦听的进程的ID,请运行以下命令:PS C:\>获取NetTCPConnection-LocalPort 443 |格式列表本地地址:::本地端口:443RemoteAddress:::远程端口:0状态:听应用设置:拥有流程:4572创建时间:2016年11月2日21:55:43卸载状态:InHost将输出格式化为具有您查找的财产的表:PS C:\>获取NetTCPConnection-LocalPort 443 |格式表-属性LocalAddress、LocalPort、State、OwningProcess本地地址本地端口状态拥有进程------------ --------- ----- -------------::443听45720.0.0.0 443听4572如果要查找进程的名称,请运行以下命令:PS C:\>获取进程-Id(获取NetTCPConnection-LocalPort 443)。拥有进程处理NPM(K)PM(K)WS(K)CPU Id SI进程名称------- ------ ----- ----- ------ -- -- -----------143 15 3448 11024 4572 0 VisualSVNS服务器

其他回答

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

lsof-i tcp:8080

获取进程的PID后,可以使用以下命令终止该进程:

终止-9<PID>

正在使用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。

快速解释

选择字符串用于过滤相关行的netstat的冗长输出。-模式根据正则表达式测试每行。-上下文0,1将为每个模式匹配输出0个前导行和1个尾随行。

我推荐NirSoft的CurrPorts。

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

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

如果您想使用GUI工具来实现这一点,可以使用Sysinternals的TCPView。

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

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

使用“查找”命令可以过滤结果。find/i“侦听”将仅显示“侦听”的端口。注意,您需要/i忽略大小写,否则您将键入find“LISTENING”。|查找“端口”将结果限制为仅包含特定端口号的端口。注意,在这一点上,它还将过滤响应字符串中任何位置具有端口号的结果。