关于网络:如何在Windows上找出正在侦听端口的进程?

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:

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

或者运行resmon.exe,或从"任务管理器性能"选项卡

enter image description here


如果你想要这个,请使用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"

find process by TCP/IP port


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

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.

    netstat -abno

    -显示所有的连接和倾听港口。

    显示在每一个连接或创建中的可执行的听港在一些情况下,知名的可执行主机多个独立成分,在这些情况下创建连接中的组件序列或倾听港口显示。在此情况下,可执行名称在[…]的底部,上面是该组分的名称,因此,直到TCP/IP完成。注意这个选项能否是时间消耗,能否失败,除非你已经足够允许。

    -N在数字表格中显示地址和港口号码。

    o显示与每一个连接相关的所有权过程ID。

  • 找到你在"本地地址"下听的港口

  • 看着这个过程的名称。

  • 说明:寻找任务经理下面的过程

  • 注释下一步(过程标识符)到港口你正在寻找。

  • 开放窗口任务经理

  • 选择Tab过程。

  • 看着你在第一步的时候没有注意到的位置。

    • 如果你看不到一个柱子,点击视图/选择柱子。选择指针。

    • 选择"从所有用户展示过程"。


  • 获取PID和图像名称

    仅使用一个命令:

    1
    for /f"tokens=5" %a in ('netstat -aon ^| findstr 9000') do tasklist /FI"PID eq %a"

    其中9000应替换为您的端口号。

    输出将包含如下内容:

    1
    2
    3
    Image Name                     PID Session Name        Session#    Mem Usage
    ========================= ======== ================ =========== ============
    java.exe                      5312 Services                   0    130,768 K

    说明:

    • 它遍历以下命令输出的每一行:

      1
      netstat -aon | findstr 9000
    • 从每一行中,提取pid(%a-此处名称不重要)并传递给以下命令(pid是该行中的5个元素)

      1
      tasklist /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,运行Get-NetTCPConnectionCmdlet。我想它也应该适用于旧的Windows版本。

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

    • 如果要查找侦听端口443的进程的ID,请运行以下命令:

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      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
    • 将输出格式化为具有所需属性的表:

      1
      2
      3
      4
      5
      6
      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
    • 如果要查找进程的名称,请运行以下命令:

      1
      2
      3
      4
      5
      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


    要找出使用哪个端口的特定进程(PID):

    1
    netstat -anon | findstr 1234

    其中1234是进程的PID。[转到"任务管理器"->"服务/流程"选项卡以查找应用程序的PID]


    netstat -aonetstat -ab告诉你应用程序,但是如果你不是管理员,你会得到"要求的操作需要提升"。

    这并不理想,但是如果您使用SysInternals Process Explorer,您可以转到特定进程的属性并查看TCP选项卡,查看它们是否使用您感兴趣的端口。一针见血的事,但也许能帮上忙……


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

    例如,如果我想找到端口80:netstat -aon | findstr :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:-C:\> netstat -anobwith administrator privilege.

    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

    所有来自悉尼的

    如果你只想知道每一个过程中的过程和威胁,我建议学习wmic。真是奇妙的线路工具,给你的比你所知道的更多。

    夸大

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

    每隔五秒钟,上面的命令都会在简报中列出所有过程。为了了解更多,你可以和EDOCX1[…]3>一起去

    1
    2
    3
    c:\>wmic /?
    c:\>wmic process /?
    c:\>wmic prcess list /?

    所以就这样注:


    对于使用PowerShell的用户,请尝试Get-NetworkStatistics

    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。

    快速解释Select-String用于过滤相关线路的netstat的长输出。-Pattern根据正则表达式测试每一行。-Context 0,1将为每个模式匹配输出0个前导行和1个尾随行。


    以编程方式,您需要iphlapi.h中的内容,例如gettcptable2()。类似mib_tcp6row2的结构包含所有者PID。


    一个帮助我的单线解决方案就是这个,用你的端口替换3000。

    $P = Get-Process -Id (Get-NetTCPConnection -LocalPort 3000).OwningProcess; kill $P.Id


    对于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