首页 文章

如何在Windows上找出正在侦听端口的进程?

提问于
浏览
1618

如何在Windows上找出正在侦听端口的进程?

25 回答

  • 5

    Windows有一个原生GUI:

    • 开始>>所有程序>>附件>>系统工具>>资源监视器

    Run resmon.exe ,或来自 TaskManager 性能标签

    enter image description here

  • 15

    如果运行以下命令,则可以获取更多信息:

    netstat -aon |find /i "listening" |find "port"
    

    使用“查找”命令可以过滤结果 . find / i“listening”将仅显示“Listening”的端口 . 注意,您需要/ i忽略Case,否则您将键入find“LISTENING” . | find“port”将结果限制为仅包含特定端口号的结果 . 注意,在此基础上,它还将过滤在响应字符串中的任何位置具有端口号的结果 .

  • 9

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

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

    此答案最初发布于this thread .

  • 143

    Using Powershell...
    ...这将是你的朋友(用您的端口号替换8080):

    netstat -abno | Select-String -Context 0,1 -Pattern 8080
    

    Sample output

    >   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 .

    Quick explanation
    Select-String 用于过滤相关行的 netstat 的冗长输出 .
    -Pattern 针对正则表达式测试每一行 .
    -Context 0,1 将为每个模式匹配输出0个前导行和1个尾随行 .

  • 1721

    大多数答案中提到的-b开关要求您拥有该计算机的管理权限 . 您并不需要提升权限来获取进程名称!

    Find the pid of the process running in the port number (e.g., 8080)

    netstat -ano | findStr "8080"
    

    Find the process name by pid

    tasklist /fi "pid eq 2216"
    
  • 1

    netstat -aonetstat -ab 告诉你应用程序,但如果你're not admin you'将获得"The requested operation requires elevation" .

    这不是理想的,但如果您使用sysinternals Process Explorer,您可以转到特定进程的属性并查看TCP选项卡,看看他们是否正在使用您感兴趣的端口 . 有点针和干草堆的东西,但也许它会帮助某人......

  • 5
    • 打开命令提示符窗口(以管理员身份)从“开始\搜索框”输入“cmd”,然后右键单击“cmd.exe”并选择“以管理员身份运行”

    • 输入以下文本,然后按Enter键 .

    netstat -abno

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

    -b 显示创建每个连接或侦听端口所涉及的可执行文件 . 在某些情况下,众所周知的可执行文件承载多个独立组件,在这些情况下,将显示创建连接或侦听端口所涉及的组件序列 . 在这种情况下,可执行文件名在底部的[]中,顶部是它调用的组件,依此类推,直到达到TCP / IP . 请注意,此选项可能非常耗时,并且除非您具有足够的权限,否则将失败 .

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

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

    • 在“本地地址”下找到您正在侦听的端口

    • 直接查看进程名称 .

    注意:在任务管理器下查找进程

    • 注意您正在查看的端口旁边的PID(进程标识符) .

    • 打开Windows任务管理器 .

    • 选择“进程”选项卡 .

    • 查找在步骤1中执行netstat时记下的PID .

    • 如果没有看到PID列,请单击“查看/选择列” . 选择PID .

    • 确保选中“显示所有用户的进程” .

  • 60
    netstat -aon | find /i "listening"
    
  • 65

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

    如果你'd like to use a GUI tool to do this there' s SysInternals TCPView .

  • 8
    C:\> netstat -a -b
    

    (添加 -n 以阻止它尝试解析主机名,这将使其快得多)

    注意丹麦人对TCPView的建议 . 看起来很有用!

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

    -b 显示创建每个连接或侦听端口所涉及的可执行文件 . 在某些情况下,众所周知的可执行文件承载多个独立组件,在这些情况下,将显示创建连接或侦听端口所涉及的组件序列 . 在这种情况下,可执行文件名在底部的[]中,顶部是它调用的组件,依此类推,直到达到TCP / IP . 请注意,此选项可能非常耗时,并且除非您具有足够的权限,否则将失败 .

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

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

  • 186

    获取与每个连接关联的所有拥有进程ID的列表:

    netstat -ao |find /i "listening"
    

    如果要杀死任何进程都有id并使用此命令,那么该端口将变为空闲

    Taskkill /F /IM pidof a process
    
  • 11

    Netstat -a显示所有连接和侦听端口-b显示可执行文件-n stop resolve hostnames(数字形式)-o拥有进程

    netstat -bano | findstr "7002"
    
    netstat -ano > ano.txt
    

    Currports有助于搜索和过滤

  • 59

    如果您需要GUI,请使用TCPView . 这是旧的微软收购的Sysinternals应用程序 .

  • 0

    获取PID和图像名称

    仅使用一个命令:

    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版本 .

    由于某种原因, Get-NetTCPConnection 的默认输出不包括进程ID,这有点令人困惑 . 但是,您始终可以通过格式化输出来获取它 . 您要找的房产是 OwningProcess .

    • 如果要查找正在侦听端口443的进程的ID,请运行以下命令:
    PS 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
    
    • 将输出格式化为具有您查找的属性的表:
    PS 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
    
    • 如果要查找进程的名称,请运行以下命令:
    PS 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
    
  • 9

    netstat -a -o显示在特定端口上运行的进程的PID .

    请记住进程ID并转到任务管理器和服务或详细信息选项卡,然后结束具有相同PID的进程 .

    因此,您可以终止在Windows中的特定端口上运行的进程 .

  • 2

    从windows中的pid获取端口号非常简单 .

    以下是步骤:

    1)转到运行 - >键入cmd - >按回车键 .

    2)写下面的命令......

    netstat -aon | findstr [port number]
    

    (注意:不要包括方括号 . )

    3)按下输入...

    4)然后cmd将为您提供在该端口上运行的服务的详细信息以及pid .

    5)打开任务管理器并点击服务选项卡,并将pid与cmd的pid匹配,就是这样 .

  • 3

    只需打开一个命令shell并输入:(说你的端口是123456)

    netstat -a -n -o | find "123456"
    

    你会看到你需要的一切

    Headers 是:

    Proto  Local Address          Foreign Address        State           PID
     TCP    0.0.0.0:37             0.0.0.0:0              LISTENING       1111
    

    这是如上所述here

  • 5

    对于那些使用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
    
  • 37

    请遵循以下工具: - 来自 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线工具,为您提供比您所知更多的东西 .

    例如: -

    c:\> wmic process list brief /every:5
    

    上面的命令将每5秒简要显示所有进程列表 . 要了解更多信息,您可以使用 /? 窗口命令,例如,

    c:\>wmic /?
    c:\>wmic process /?
    c:\>wmic prcess list /?
    

    等等等等 . :)

  • 19

    以编程方式,您需要iphlpapi.h中的内容,例如GetTcpTable2() . 像MIB_TCP6ROW2这样的结构包含所有者PID .

  • 21

    首先,我们找到我们需要消除的特定任务的进程ID,以便获得端口空闲

    类型
    netstat -n -a -o

    在Windows命令行提示符(cmd)中执行此命令后,选择pid,我认为最后一列假设这是3312

    现在输入

    taskkill /F /PID 3312

    您现在可以通过键入netstat命令进行交叉检查 .

    注意:有时Windows不允许您直接在CMD上运行此命令,因此首先需要从start->命令提示符处理此步骤(右键单击命令提示符,然后以管理员身份运行)

  • 9

    对于Windows,如果要查找侦听或连接到端口1234的内容,请在cmd提示符处执行以下命令:

    netstat -na | find "1234"
    
  • 5

    我推荐来自NirSoft的CurrPorts .

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

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

相关问题