如何确定哪个进程正在侦听Windows上的TCP或UDP端口?
当前回答
我推荐NirSoft的CurrPorts。
CurrPorts可以过滤显示的结果。TCPView没有此功能。
注意:您可以右键单击进程的套接字连接并选择“关闭选定的TCP连接”(您也可以在TCPView中执行此操作)。这通常会在我切换VPN后修复Outlook和Lync的连接问题。使用CurrPort,您还可以使用“/close”参数从命令行关闭连接。
其他回答
获取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的默认shell(PowerShell),不使用外部应用程序
对于使用PowerShell的用户,请尝试Get NetworkStatistics:
> 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
根据带有信息和击杀的答案,对我来说,将它们组合在一个命令中是有用的。您可以从cmd运行此命令以获取有关侦听给定端口的进程的信息(示例8080):
for /f "tokens=3 delims=LISTENING" %i in ('netstat -ano ^| findStr "8080" ^| findStr "["') do @tasklist /nh /fi "pid eq %i"
或者如果你想杀死它:
for /f "tokens=3 delims=LISTENING" %i in ('netstat -ano ^| findStr "8080" ^| findStr "["') do @Taskkill /F /IM %i
您也可以将这些命令放入bat文件中(它们略有不同-将%i替换为%%i):
文件portInfo.bat
for /f "tokens=3 delims=LISTENING" %%i in (
'netstat -ano ^| findStr "%1" ^| findStr "["'
) do @tasklist /nh /fi "pid eq %%i"
文件端口Kill.bat
for /f "tokens=3 delims=LISTENING" %%i in (
'netstat -ano ^| findStr "%1" ^| findStr "["'
) do @Taskkill /F /IM %%i
然后您可以通过cmd执行以下操作:
端口信息.bat 8080
or
端口Kill.bat 8080
如果运行以下命令,可以获得更多信息:
netstat -aon | find /i "listening" |find "port"
使用“查找”命令可以过滤结果。find/i“侦听”将仅显示“侦听”的端口。注意,您需要/i忽略大小写,否则您将键入find“LISTENING”。|查找“端口”将结果限制为仅包含特定端口号的端口。注意,在这一点上,它还将过滤响应字符串中任何位置具有端口号的结果。
PowerShell(PowerShell)
TCP
Get-Process -Id (Get-NetTCPConnection -LocalPort YourPortNumberHere).OwningProcess
UDP
Get-Process -Id (Get-NetUDPEndpoint -LocalPort YourPortNumberHere).OwningProcess
cmd
netstat -a -b
(添加-n以阻止它尝试解析主机名,这将使它更快。)
注意Dane对TCPView的建议。它看起来很有用!
-a显示所有连接和侦听端口。
-b显示创建每个连接或侦听端口所涉及的可执行文件。在某些情况下,众所周知的可执行程序包含多个独立组件,在这些情况下,将显示创建连接或侦听接口所涉及的组件序列。在这种情况下,可执行文件名位于底部的[]中,顶部是它调用的组件,依此类推,直到到达TCP/IP。请注意,此选项可能很耗时,除非您有足够的权限,否则将失败。
-n以数字形式显示地址和端口号。
-o显示与每个连接关联的所属进程ID。
推荐文章
- GIT克隆在windows中跨本地文件系统回购
- 如何运行一个PowerShell脚本而不显示窗口?
- PowerShell:仅为单个命令设置环境变量
- 在SSH会话中查找客户端的IP地址
- 为什么这个Windows批处理文件只执行第一行,而在命令shell中执行所有三行?
- 环境变量存储在Windows注册表的哪里?
- 有一个好的Valgrind Windows的替代品吗?
- 模拟慢速互联网连接
- 127.0.0.1和localhost之间的区别是什么
- Windows和Linux上的c++编译:ifdef开关
- 如何验证批处理文件中是否存在一个文件?
- 为什么SCTP不常用/不为人所知
- 无法启动IIS Express Web服务器,注册URL失败,访问被拒绝
- XAMPP -端口80被PID 4的“无法打开进程”使用!12
- 为什么git在Windows下记不住我的密码