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


当前回答

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

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

netstat -ano | findStr "8080"

通过pid查找进程名称

tasklist /fi "pid eq 2216"

其他回答

使用以下批处理脚本,该脚本将进程名称作为参数,并为进程提供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

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

对于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服务器

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

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

netstat -ano | findStr "8080"

通过pid查找进程名称

tasklist /fi "pid eq 2216"

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

netstat -ao |find /i "listening"

如果要终止任何进程,请具有ID并使用此命令,以便端口变为空闲

Taskkill /F /IM PID of a process