@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
for /f "tokens=5" %a in ('netstat -aon ^| findstr 9000') do tasklist /FI "PID eq %a"
其中 9000 应替换为您的端口号 .
output 将包含以下内容:
Image Name PID Session Name Session# Mem Usage
========================= ======== ================ =========== ============
java.exe 5312 Services 0 130,768 K
Explanation:
它遍历以下命令输出中的每一行:
netstat -aon | findstr 9000
从每一行
中提取PID( %a - 此处名称不重要)(PID是该行中的 5 元素)并传递给以下命令
tasklist /FI "PID eq 5312"
如果你想要_147899_ header 并返回 command prompt ,你可以使用:
echo off & (for /f "tokens=5" %a in ('netstat -aon ^| findstr 9000') do tasklist /NH /FI "PID eq %a") & echo on
Output:
java.exe 5312 Services 0 130,768 K
42
使用Windows 10或Windows Server 2016上的PowerShell 5,运行Get-NetTCPConnection cmdlet . 我想它应该适用于较旧的Windows版本 .
25 回答
Windows有一个原生GUI:
或 Run
resmon.exe
,或来自 TaskManager 性能标签如果运行以下命令,则可以获取更多信息:
使用“查找”命令可以过滤结果 . find / i“listening”将仅显示“Listening”的端口 . 注意,您需要/ i忽略Case,否则您将键入find“LISTENING” . | find“port”将结果限制为仅包含特定端口号的结果 . 注意,在此基础上,它还将过滤在响应字符串中的任何位置具有端口号的结果 .
输入命令:
netstat -aon | findstr :DESIRED_PORT_NUMBER
例如,如果我想找到端口80:
netstat -aon | findstr :80
此答案最初发布于this thread .
Using Powershell...
...这将是你的朋友(用您的端口号替换8080):
Sample output
所以在这个例子中,tnslsnr.exe(OracleXE数据库)正在侦听端口8080 .
Quick explanation
Select-String
用于过滤相关行的netstat
的冗长输出 .-Pattern
针对正则表达式测试每一行 .-Context 0,1
将为每个模式匹配输出0个前导行和1个尾随行 .大多数答案中提到的-b开关要求您拥有该计算机的管理权限 . 您并不需要提升权限来获取进程名称!
Find the pid of the process running in the port number (e.g., 8080)
Find the process name by pid
netstat -ao
和netstat -ab
告诉你应用程序,但如果你're not admin you'将获得"The requested operation requires elevation" .这不是理想的,但如果您使用sysinternals Process Explorer,您可以转到特定进程的属性并查看TCP选项卡,看看他们是否正在使用您感兴趣的端口 . 有点针和干草堆的东西,但也许它会帮助某人......
打开命令提示符窗口(以管理员身份)从“开始\搜索框”输入“cmd”,然后右键单击“cmd.exe”并选择“以管理员身份运行”
输入以下文本,然后按Enter键 .
netstat -abno
-a 显示所有连接和侦听端口 .
-b 显示创建每个连接或侦听端口所涉及的可执行文件 . 在某些情况下,众所周知的可执行文件承载多个独立组件,在这些情况下,将显示创建连接或侦听端口所涉及的组件序列 . 在这种情况下,可执行文件名在底部的[]中,顶部是它调用的组件,依此类推,直到达到TCP / IP . 请注意,此选项可能非常耗时,并且除非您具有足够的权限,否则将失败 .
-n 以数字形式显示地址和端口号 .
-o 显示与每个连接关联的拥有进程ID .
在“本地地址”下找到您正在侦听的端口
直接查看进程名称 .
注意:在任务管理器下查找进程
注意您正在查看的端口旁边的PID(进程标识符) .
打开Windows任务管理器 .
选择“进程”选项卡 .
查找在步骤1中执行netstat时记下的PID .
如果没有看到PID列,请单击“查看/选择列” . 选择PID .
确保选中“显示所有用户的进程” .
使用下面的批处理脚本,它将进程名称作为参数,并为进程提供netstat输出 .
如果你'd like to use a GUI tool to do this there' s SysInternals TCPView .
(添加 -n 以阻止它尝试解析主机名,这将使其快得多)
注意丹麦人对TCPView的建议 . 看起来很有用!
-a 显示所有连接和侦听端口 .
-b 显示创建每个连接或侦听端口所涉及的可执行文件 . 在某些情况下,众所周知的可执行文件承载多个独立组件,在这些情况下,将显示创建连接或侦听端口所涉及的组件序列 . 在这种情况下,可执行文件名在底部的[]中,顶部是它调用的组件,依此类推,直到达到TCP / IP . 请注意,此选项可能非常耗时,并且除非您具有足够的权限,否则将失败 .
-n 以数字形式显示地址和端口号 .
-o 显示与每个连接关联的拥有进程ID .
获取与每个连接关联的所有拥有进程ID的列表:
如果要杀死任何进程都有id并使用此命令,那么该端口将变为空闲
Netstat -a显示所有连接和侦听端口-b显示可执行文件-n stop resolve hostnames(数字形式)-o拥有进程
Currports有助于搜索和过滤
如果您需要GUI,请使用TCPView . 这是旧的微软收购的Sysinternals应用程序 .
获取PID和图像名称
仅使用一个命令:
其中
9000
应替换为您的端口号 .output 将包含以下内容:
Explanation:
从每一行
%a
- 此处名称不重要)(PID是该行中的5
元素)并传递给以下命令如果你想要_147899_ header 并返回 command prompt ,你可以使用:
Output:
使用Windows 10或Windows Server 2016上的PowerShell 5,运行Get-NetTCPConnection cmdlet . 我想它应该适用于较旧的Windows版本 .
由于某种原因,
Get-NetTCPConnection
的默认输出不包括进程ID,这有点令人困惑 . 但是,您始终可以通过格式化输出来获取它 . 您要找的房产是OwningProcess
.netstat -a -o显示在特定端口上运行的进程的PID .
请记住进程ID并转到任务管理器和服务或详细信息选项卡,然后结束具有相同PID的进程 .
因此,您可以终止在Windows中的特定端口上运行的进程 .
从windows中的pid获取端口号非常简单 .
以下是步骤:
1)转到运行 - >键入cmd - >按回车键 .
2)写下面的命令......
(注意:不要包括方括号 . )
3)按下输入...
4)然后cmd将为您提供在该端口上运行的服务的详细信息以及pid .
5)打开任务管理器并点击服务选项卡,并将pid与cmd的pid匹配,就是这样 .
只需打开一个命令shell并输入:(说你的端口是123456)
你会看到你需要的一切
Headers 是:
这是如上所述here
对于那些使用Powershell的人,请尝试Get-NetworkStatistics:
请遵循以下工具: - 来自 cmd : -
C:\> netstat -anob
,具有 Administrator 权限 .http://technet.microsoft.com/en-us/sysinternals/bb896653 - Process Explorer
http://technet.microsoft.com/en-us/sysinternals/bb896645 - 进程转储
http://technet.microsoft.com/en-us/sysinternals/bb896644 - 端口监视器
全部来自sysinternals.com
如果您只是想知道每个进程下的进程运行和线程,我建议您了解
wmic
. 精彩的cmd线工具,为您提供比您所知更多的东西 .例如: -
上面的命令将每5秒简要显示所有进程列表 . 要了解更多信息,您可以使用
/?
窗口命令,例如,等等等等 . :)
以编程方式,您需要iphlpapi.h中的内容,例如GetTcpTable2() . 像MIB_TCP6ROW2这样的结构包含所有者PID .
首先,我们找到我们需要消除的特定任务的进程ID,以便获得端口空闲
类型
netstat -n -a -o
在Windows命令行提示符(cmd)中执行此命令后,选择pid,我认为最后一列假设这是3312
现在输入
taskkill /F /PID 3312
您现在可以通过键入netstat命令进行交叉检查 .
注意:有时Windows不允许您直接在CMD上运行此命令,因此首先需要从start->命令提示符处理此步骤(右键单击命令提示符,然后以管理员身份运行)
对于Windows,如果要查找侦听或连接到端口1234的内容,请在cmd提示符处执行以下命令:
我推荐来自NirSoft的CurrPorts .
CurrPorts可以过滤显示的结果 . TCPView没有此功能 .
注意:您可以右键单击进程的套接字连接,然后选择“关闭所选的TCP连接”(您也可以在TCPView中执行此操作) . 这经常修复我切换VPN后我在Outlook和Lync上遇到的连接问题 . 使用CurrPorts,您还可以使用“/ close”参数从命令行关闭连接 .