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


当前回答

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

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

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

其他回答

使用以下工具:从cmd:C:\>netstat-anob,具有管理员权限。

进程管理

过程转储

端口监视器

全部来自sysinternals.com。

如果您只想了解每个进程下的进程运行和线程,我建议您学习wmic。这是一个很棒的命令行工具,它为您提供了比您所能知道的更多的信息。

例子:

c:\> wmic process list brief /every:5

上述命令将每5秒简要显示一个所有进程列表。要了解更多信息,您可以与/?例如,

c:\> wmic /?
c:\> wmic process /?
c:\> wmic prcess list /?

依此类推。:)

获取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个元素)并传递给以下命令任务列表/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

对于Windows:

netstat -aon | find /i "listening"

在编程上,您需要iphlpapi.h中的东西,例如GetTcpTable2()。像MIB_TCP6ROW2这样的结构包含所有者PID。

查找使用端口8000的pid

netstat -aon | findstr '8000'

在窗口中终止该进程

taskkill /pid pid /f

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