如何在Windows系统中查找监听TCP或UDP端口的进程?
Get-Process -Id (Get-NetTCPConnection -LocalPort YourPortNumberHere).OwningProcess
Get-Process -Id (Get-NetUDPEndpoint -LocalPort YourPortNumberHere).OwningProcess
netstat -a -b
(使用-n选项来停止尝试解析主机名,这将使其运行速度更快。)
请注意Dane的建议,使用TCPView非常有用!
-a 显示所有连接和侦听端口。
-b 显示创建每个连接或侦听端口的可执行文件。在某些情况下,知名可执行文件会托管多个独立组件,在这些情况下,显示创建连接或侦听端口所涉及的组件序列。在这种情况下,可执行文件名称在底部的[]中,顶部是它调用的组件,依此类推,直到到达TCP/IP。请注意,此选项可能需要时间,并且如果您没有足够的权限,则会失败。
-n 以数字形式显示地址和端口号。
-o 显示与每个连接关联的拥有进程ID。
1234
)后,您可以使用命令tasklist /fi "pid eq 1234"
来查找该进程的名称和其他详细信息。 - Steve ChambersWindows有原生的图形用户界面:
开始菜单 → 所有程序 → 附件 → 系统工具 → 资源监视器
或运行resmon.exe
,
或从任务管理器→性能选项卡启动。
对于Windows操作系统:
netstat -aon | find /i "listening"
netstat -aon | find /i "abhören"
。 - LeviteFIND: 参数格式不正确
。 - Nicke Manarin如果你需要图形用户界面(GUI)来查看这个,可以使用TCPView。它是微软收购的旧Sysinternals应用程序。
如果您运行以下命令,可以获取更多信息:
netstat -aon | find /i "listening" |find "port"
使用“查找”命令可以过滤结果。 find /i "listening"
将只显示处于“侦听”状态的端口。请注意,您需要 /i
来忽略大小写,否则您将输入 find "LISTENING"。 | find "port"
将限制结果仅包含特定端口号。请注意,在此情况下,它也将筛选响应字符串中任何位置具有端口号的结果。
{back tick}
"listening{back tick}
"" |find "{back tick}
"port{back tick}
"" (<- 请注意转义的引号 - 抱歉术语“反引号”因为我不能添加实际字符,因为它会认为它是一个截图) - Tristan van Dam打开命令提示符窗口(作为管理员):从“开始/搜索框”输入“cmd”,然后右键单击“cmd.exe”,并选择“以管理员身份运行”。
输入以下文本,然后按回车。
netstat -abno
-a 显示所有连接和侦听端口。
-b 显示创建每个连接或侦听端口的可执行文件。在某些情况下,知名的可执行文件会托管多个独立的组件,在这种情况下,涉及创建连接或侦听端口的组件序列将显示出来。在这种情况下,可执行文件名称位于底部的[]中,在顶部是它调用的组件,等等,直到达到TCP/IP。请注意,此选项可能需要花费很长时间,并且如果您没有足够的权限,它将失败。
-n 以数字形式显示地址和端口号。
-o 显示与每个连接关联的拥有进程ID。
在“本地地址”下找到您正在侦听的端口。
直接在其下查看进程名称。
注意:要在任务管理器中找到进程
记下您正在查看的端口旁边的PID(进程标识符)。
打开Windows任务管理器。
选择“进程”选项卡。
查找在步骤1中执行netstat时所注意到的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是该行中的第5个元素,并传递给下一个命令。
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
findstr :9000
,否则你甚至会找到包含数字的应用程序(例如,当你搜索“80”时,你会发现端口80、800、8000上的应用程序)。 - Radon8472首先,我们需要找到要终止的特定任务的进程 ID,以便释放端口:
输入命令
netstat -n -a -o
在Windows命令行提示符(cmd)中执行此命令后,请选择我认为是最后一列的pid。假设这是3312。taskkill /F /PID 3312
现在您可以通过输入netstat
命令进行交叉检查。
注意:有时Windows不允许您直接在CMD上运行此命令,因此首先需要执行以下步骤:
从开始菜单->命令提示符(右键单击命令提示符并以管理员身份运行)
taskkill -F -PID 3312
。 - Ryu S.在Windows 10或Windows Server 2016上使用PowerShell 5,运行Get-NetTCPConnection
命令。我猜它也适用于旧版的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
netstat -aof | findstr :8080
。 - David Jesus