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


当前回答

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

lsof-i tcp:8080

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

终止-9<PID>

其他回答

使用Windows的默认shell(PowerShell),不使用外部应用程序

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

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

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

netstat -ano | findStr "8080"

通过pid查找进程名称

tasklist /fi "pid eq 2216"

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

netsh int ipv4 show excludedportrange protocol=tcp

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

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

PowerShell(PowerShell)

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

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

然后你会得到一张这样的桌子:

ProcessName              LocalAddress  LocalPort
-----------              ------------  ---------
services                 ::                49755
jhi_service              ::1               49673
svchost                  ::                  135
services                 0.0.0.0           49755
spoolsv                  0.0.0.0           49672

对于UDP,它是:

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