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


当前回答

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

其他回答

打开命令提示符-start→ 跑→ cmd或开始菜单→ 所有程序→ 配件→ 命令提示符。类型netstat-aon|findstr'[port_number]'

将[port_number]替换为要检查的实际端口号,然后按Enter键。

如果任何应用程序正在使用该端口,那么将显示该应用程序的详细信息。显示在列表最后一列的数字是该应用程序的PID(进程ID)。请注意这一点。类型tasklist | findstr“[PID]”

用上述步骤中的数字替换[PID],然后按Enter键。

将显示使用端口号的应用程序名称。

键入命令:netstat-aon|findstr:DESIRED_PORT_NUMBER

例如,如果我想查找端口80:netstat-aon|findstr:80

这个答案最初是针对这个问题发布的。

我推荐NirSoft的CurrPorts。

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

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

netstat-aof|findstr:8080(更改任何端口的8080)

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