如何在Windows系统中查找使用80端口的程序?

206

如何在Windows中查找使用80端口的程序?

我找不到它。


21
这个问题更适合在http://superuser.com/ 上提问。 - Blaine Lafreniere
1
你如何在Windows上找出哪个进程正在监听一个端口?请参见这里 - bcorso
1
有这么多人正在查看这个问题并点赞我的答案,我认为我们应该重新考虑开放它。 - Technotronic
1
netstat -aof | findstr :80 - David Jesus
@Technotronic:这不是一件好事。这意味着要维护两倍的内容。 - Ben Voigt
显示剩余4条评论
6个回答

227

输入以下命令:

netstat -aon | findstr :80

它将显示所有使用端口80的进程。请注意右列中的pid(进程ID)。

如果您想释放该端口,请转至任务管理器,按pid排序并关闭这些进程。

-a 显示所有连接和侦听端口。

-o 显示与每个连接关联的拥有进程ID。

-n以数字形式显示地址和端口号。


9
要查找运行它的进程,请使用以下命令:tasklist /svc /FI "PID eq 1348" (感谢@Quang-Trinh) - Adriano P
netstat -ano ^| findstr "0.0.0.0:80 check Web_Ports_Inspector.bat http://www.windowstechinfo.com/2015/05/how-to-check-whats-using-port-80-or-443-in-a-single-step-web-port-inspector.html" - Aravinda
是否可以关闭连接? - Black
如何在不终止进程的情况下释放端口? - Technotronic
3
请注意,findstr :80将匹配所有端口,包括“80”端口,因此除了端口80之外,它还将匹配端口8009、8080等。 - Benny Code
如果PID 4正在监听端口:80,该怎么办?这里的“4”指的是Windows系统。 - Sandburg

212

在开始菜单中选择 → 附件 → 右键单击 "命令提示符"。在菜单中,点击"以管理员身份运行" (在Windows XP中,您可以像平时一样运行它),运行netstat -anb,然后查找输出来寻找您的程序。

顺便说一下,默认情况下Skype尝试使用端口80和443进行传入连接。

您还可以运行netstat -anb >%USERPROFILE%\ports.txt,然后运行start %USERPROFILE%\ports.txt以在文本编辑器中打开端口和进程列表,在那里您可以搜索所需的信息。

您还可以使用PowerShell解析netstat输出并以更好的方式呈现它(或以任何您想要的方式处理它):

$proc = @{};
Get-Process | ForEach-Object { $proc.Add($_.Id, $_) };
netstat -aon | Select-String "\s*([^\s]+)\s+([^\s]+):([^\s]+)\s+([^\s]+):([^\s]+)\s+([^\s]+)?\s+([^\s]+)" | ForEach-Object {
    $g = $_.Matches[0].Groups;
    New-Object PSObject |
        Add-Member @{ Protocol =           $g[1].Value  } -PassThru |
        Add-Member @{ LocalAddress =       $g[2].Value  } -PassThru |
        Add-Member @{ LocalPort =     [int]$g[3].Value  } -PassThru |
        Add-Member @{ RemoteAddress =      $g[4].Value  } -PassThru |
        Add-Member @{ RemotePort =         $g[5].Value  } -PassThru |
        Add-Member @{ State =              $g[6].Value  } -PassThru |
        Add-Member @{ PID =           [int]$g[7].Value  } -PassThru |
        Add-Member @{ Process = $proc[[int]$g[7].Value] } -PassThru;
#} | Format-Table Protocol,LocalAddress,LocalPort,RemoteAddress,RemotePort,State -GroupBy @{Name='Process';Expression={$p=$_.Process;@{$True=$p.ProcessName; $False=$p.MainModule.FileName}[$p.MainModule -eq $Null] + ' PID: ' + $p.Id}} -AutoSize
} | Sort-Object PID | Out-GridView

此外,它不需要提升权限即可运行。


它会输出太多内容,但我只需要有关80端口的信息。 - user198729
156
该命令为Windows系统中的网络诊断工具命令,用于列出所有正在使用TCP协议且本地地址为IP地址,端口号为80的网络连接。该命令可以帮助用户查看是否有程序占用了80端口,以及对网络连接进行监控和分析。 - Anton Tykhyy
3
那么你需要仔细观看列表,或者安装一些额外的软件。例如,可以访问http://technet.microsoft.com/en-us/sysinternals/bb897437.aspx。 - n0rd
8
Anton,它将截断进程名称。 - n0rd
3
@Anton Tykhyy,这样我看不到节目名称,只能看到数字。 - user198729
最初(目前情况不确定),Skype在通话和聊天时使用点对点连接:这样他们就不需要庞大的基础设施来支持数百万客户端,因此客户端尝试直接相互连接。端口80和443不太可能被阻止进行传入连接,因此他们会尽可能使用它。 - n0rd

16
如果你想变得更加高级,可以从Sysinternals下载TCPView
TCPView是一个Windows程序,它将向您显示系统上所有TCP和UDP端点的详细列表,包括TCP连接的本地和远程地址以及状态。在Windows Server 2008、Vista和XP上,TCPView还报告拥有该端点的进程的名称。TCPView提供了一个更具信息性和方便呈现的Netstat程序子集,该程序随Windows一起提供。

14

右键点击"命令提示符"或"PowerShell",在菜单中点击"以管理员身份运行"(在Windows XP中,您可以像往常一样运行它)。

正如Rick Vanover在在Windows Server 2008中查看使用TCP端口的进程中所提到的

以下命令将显示在端口级别上正在使用的网络流量:

Netstat -a -n -o
或者
Netstat -a -n -o >%USERPROFILE%\ports.txt

(打开端口和进程列表,使用文本编辑器,在其中搜索所需信息)

然后,

通过netstat输出中列出的PID,您可以跟进Windows任务管理器(taskmgr.exe),或运行一个脚本,该脚本使用前一步骤中使用端口的特定PID。然后,您可以使用“tasklist”命令与相应于问题端口的特定PID。

例如:

tasklist /svc /FI "PID eq 1348"

11

使用这个方便的免费软件:

CurrPorts是一款网络监控软件,显示本地计算机上所有当前打开的TCP/IP和UDP端口列表。

在此输入图片描述


3

在命令行中使用NETSTAT

netstat util

这将仅显示帮助文本(包括所有不同的选项/开关)。应该使用哪个选项?是 -a - "-a 显示所有连接和监听端口。" 吗? - Peter Mortensen
还是使用-a -n -o参数? - Peter Mortensen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接