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


当前回答

打开命令提示符窗口(以管理员身份)从“开始\搜索框”输入“cmd”,然后右键单击“cmd.exe”并选择“以管理员身份运行”输入以下文本,然后按Enter键。netstat-荷兰银行-a显示所有连接和侦听端口。-b显示创建每个连接所涉及的可执行文件或侦听端口。在某些情况下,知名的可执行文件主机多个独立组件,在这些情况下创建连接所涉及的组件序列或显示监听端口。在这种情况下,可执行文件name位于底部的[]中,顶部是它调用的组件,以此类推,直到达到TCP/IP。请注意,此选项可能很耗时,除非你有足够的时间权限。-n以数字形式显示地址和端口号。-o显示与每个连接关联的所属进程ID。在“本地地址”下查找您正在侦听的端口查看直接位于其下的进程名称。

注意:在任务管理器下查找流程

注意您正在查看的端口旁边的PID(进程标识符)。打开Windows任务管理器。选择流程选项卡。查找在步骤1中执行netstat时注意到的PID。如果没有看到PID列,请单击查看/选择列。选择PID。确保选中“显示所有用户的流程”。

其他回答

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

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

查找使用端口8000的pid

netstat -aon | findstr '8000'

在窗口中终止该进程

taskkill /pid pid /f

其中pid是从first命令中获取的进程id

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

netsh int ipv4 show excludedportrange protocol=tcp

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

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