How can you find out which process is listening on a port on Windows?
如何确定哪个进程正在Windows上的端口上侦听?
鲍尔谢尔
1 | Get-Process -Id (Get-NetTCPConnection -LocalPort portNumber).OwningProcess |
CMDZZU1
(Add-n to stop it trying to resolve hostnames,which will make it a lot faster.)
Note Dane's recommendation for TCPView.它看起来非常有用!
-显示所有的连接和倾听港口。
b显示在建立每一个连接或倾听端口中的可执行性。在一些情况下,可以执行的主机多个独立组件,在这些情况下,可以显示在建立连接或倾听端口中的组件的顺序。在本例中,可执行名称在[……]的底部,上面是该组分的名称,因此,在TCP/IP完成之前,该组分被称为该组分。注意,这个选项可以是时间消耗,而且无论如何你都有足够的许可。
-N在数字表格中显示地址和港口号码。
o显示与每一个连接相关的所有权过程ID。
有一个针对Windows的本地GUI:
- 开始>>所有程序>>附件>>系统工具>>资源监视器
或者运行
如果你想要这个,请使用TCPView。这是旧的Sysinternals App that Microsoft Bought.
1 | netstat -aon | find /i"listening" |
大多数答案中提到的-b开关要求您对机器具有管理权限。您不需要提升权限来获取进程名!
找到在端口号中运行的进程的PID(例如8080)
1 | netstat -ano | findStr"8080" |
通过pid查找进程名
1 | tasklist /fi"pid eq 2216" |
如果运行以下命令,则可以获得更多信息:
1 | netstat -aon |find /i"listening" |find"port" |
使用"find"命令可以过滤结果。find/i"listening"将仅显示"listening"端口。注意,您需要/i忽略大小写,否则您将键入find"listening"。|查找"端口"将结果限制为仅包含特定端口号的结果。注意,在这一点上,它还将过滤响应字符串中任何位置的端口号结果。
Open a command prompt window(as administrator)from"start-search box"enter"cmd"then right-click on"cmd.exe"and select"run as administrator"
Enter the following text then hit enter.
-显示所有的连接和倾听港口。
显示在每一个连接或创建中的可执行的听港在一些情况下,知名的可执行主机多个独立成分,在这些情况下创建连接中的组件序列或倾听港口显示。在此情况下,可执行名称在[…]的底部,上面是该组分的名称,因此,直到TCP/IP完成。注意这个选项能否是时间消耗,能否失败,除非你已经足够允许。
-N在数字表格中显示地址和港口号码。
o显示与每一个连接相关的所有权过程ID。
找到你在"本地地址"下听的港口
看着这个过程的名称。
说明:寻找任务经理下面的过程
注释下一步(过程标识符)到港口你正在寻找。
开放窗口任务经理
选择Tab过程。
看着你在第一步的时候没有注意到的位置。
-
如果你看不到一个柱子,点击视图/选择柱子。选择指针。
-
选择"从所有用户展示过程"。
获取PID和图像名称
仅使用一个命令:
1 | for /f"tokens=5" %a in ('netstat -aon ^| findstr 9000') do tasklist /FI"PID eq %a" |
其中
输出将包含如下内容:
1 2 3 | Image Name PID Session Name Session# Mem Usage ========================= ======== ================ =========== ============ java.exe 5312 Services 0 130,768 K |
说明:
它遍历以下命令输出的每一行:
1netstat -aon | findstr 9000从每一行中,提取pid(
%a -此处名称不重要)并传递给以下命令(pid是该行中的5 个元素)1tasklist /FI"PID eq 5312"
如果要跳过标题并返回命令提示,可以使用:
1 | echo off & (for /f"tokens=5" %a in ('netstat -aon ^| findstr 9000') do tasklist /NH /FI"PID eq %a") & echo on |
输出:
1 | java.exe 5312 Services 0 130,768 K |
首先,我们找到需要消除的特定任务的进程ID,以便获得端口自由。
类型netstat-n-a-o
在Windows命令行提示符(cmd)中执行此命令后选择我认为最后一列的pid,假设这是3312
现在类型
任务终止/F/PID 3312
现在可以通过键入netstat命令进行交叉检查。
注意:有时Windows不允许直接在cmd上运行此命令,因此首先需要执行以下步骤从Start->Command Prompt(右击Command Prompt,以管理员身份运行)
在Windows中从PID中获取端口号非常简单。
步骤如下:
1)转到"运行"-->键入cmd->按Enter键。
2)编写以下命令…
1 | netstat -aon | findstr [port number] |
(注:不包括方括号。)
3)按Enter键…
4)然后,cmd将提供该端口上运行的服务的详细信息以及PID。
5)打开"任务管理器",点击"服务"选项卡,将PID与命令的PID匹配,就这样。
要获取与每个连接关联的所有所属进程ID的列表,请执行以下操作:
1 | netstat -ao |find /i"listening" |
如果要终止任何进程,请具有ID并使用此命令,以便端口变为空闲
1 | Taskkill /F /IM pidof a process |
只需打开命令shell并键入:(说您的端口是123456)
1 | netstat -a -n -o | find"123456" |
你将看到你所需要的一切
标题为:
1 2 | Proto Local Address Foreign Address State PID TCP 0.0.0.0:37 0.0.0.0:0 LISTENING 1111 |
这是这里提到的
如果你想用一个Gui工具来做这件事的话If you'd like to use a Gui tool to do this sysinternals tcpview.
使用Windows 10或Windows Server 2016上的PowerShell 5,运行
由于某种原因,
如果要查找侦听端口443的进程的ID,请运行以下命令:
1
2
3
4
5
6
7
8
9
10
11PS 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将输出格式化为具有所需属性的表:
1
2
3
4
5
6PS 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如果要查找进程的名称,请运行以下命令:
1
2
3
4
5PS 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
要找出使用哪个端口的特定进程(PID):
1 | netstat -anon | findstr 1234 |
其中1234是进程的PID。[转到"任务管理器"->"服务/流程"选项卡以查找应用程序的PID]
这并不理想,但是如果您使用SysInternals Process Explorer,您可以转到特定进程的属性并查看TCP选项卡,查看它们是否使用您感兴趣的端口。一针见血的事,但也许能帮上忙……
输入命令:
例如,如果我想找到端口80:
这个答案最初发布在这个线程中。
我推荐Nirsoft的咖喱。
currports可以过滤显示的结果。tcpview没有此功能。
注意:您可以右键单击进程的套接字连接并选择"关闭选定的TCP连接"(您也可以在tcpview中这样做)。这通常会在我切换VPN后修复我与Outlook和lync之间的连接问题。使用currports,还可以使用"/close"参数关闭命令行中的连接。
网通
- -A显示所有连接和侦听端口
- -B显示可执行文件
- -n停止解析主机名(数字形式)
-o拥有过程
Netstat-班诺芬德斯特"7002"
netstat-ano>ano.txt
currports工具有助于搜索和筛选
Netstat-A-O这表明了在一个特定港口上运行过程的转折点。
保持对过程的思考,并前往任务经理和服务或详细的Tab和结束同样的过程。
所以你可以在窗口的某个特定端口上杀死一个运行过程。
Follow these tools:-from CMD:-
http://technet.microsoft.com/en-us/sysinternals/bb896653-process explorer
http://technet.microsoft.com/en-us/sysinternals/bb896645-process dump
http://technet.microsoft.com/en-us/sysinternals/bb896644-port monitor
所有来自悉尼的
如果你只想知道每一个过程中的过程和威胁,我建议学习
夸大
1 | c:\> wmic process list brief /every:5 |
每隔五秒钟,上面的命令都会在简报中列出所有过程。为了了解更多,你可以和EDOCX1[…]3>一起去
1 2 3 | c:\>wmic /? c:\>wmic process /? c:\>wmic prcess list /? |
所以就这样注:
对于使用PowerShell的用户,请尝试
1 2 3 4 5 6 7 8 9 10 11 12 | > Get-NetworkStatistics | where Localport -eq 8000 ComputerName : DESKTOP-JL59SC6 Protocol : TCP LocalAddress : 0.0.0.0 LocalPort : 8000 RemoteAddress : 0.0.0.0 RemotePort : 0 State : LISTENING ProcessName : node PID : 11552 |
正在使用PowerShell……这将是您的朋友(用端口号替换8080):
1 | netstat -abno | Select-String -Context 0,1 -Pattern 8080 |
样本输出
1 2 3 4 | > 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。
快速解释
以编程方式,您需要iphlapi.h中的内容,例如gettcptable2()。类似mib_tcp6row2的结构包含所有者PID。
一个帮助我的单线解决方案就是这个,用你的端口替换3000。
对于Windows,如果要查找侦听或连接到端口1234的内容,请在命令提示下执行以下操作:
1 | netstat -na | find"1234" |
使用下面的批处理脚本,该脚本以进程名为参数,并为进程提供netstat输出。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | @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 |