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


当前回答

我推荐NirSoft的CurrPorts。

CurrPorts可以过滤显示的结果。TCPView没有此功能。

注意:您可以右键单击进程的套接字连接并选择“关闭选定的TCP连接”(您也可以在TCPView中执行此操作)。这通常会在我切换VPN后修复Outlook和Lync的连接问题。使用CurrPort,您还可以使用“/close”参数从命令行关闭连接。

其他回答

首先,我们找到需要消除的特定任务的进程id,以便获得自由端口:

类型

netstat -n -a -o

在Windows命令行提示符(cmd)中执行此命令后,选择我认为是最后一列的pid。假设这是3312。

现在键入

taskkill /F /PID 3312

现在可以通过键入netstat命令进行交叉检查。

注意:有时Windows不允许您直接在CMD上运行此命令,因此首先需要执行以下步骤:

从开始菜单->命令提示符(右键单击命令提示符,然后以管理员身份运行)

使用以下工具:从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)正在使用哪个端口:

netstat -anon | findstr 1234

其中1234是流程的PID。[转到任务管理器→ “服务/流程”选项卡,以查找应用程序的PID。]

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

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