如何找出在Windows上的端口上偵聽哪個進程?




windows wmi port (16)

獲取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 元素)並傳遞給下面的命令

    tasklist /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上的端口上偵聽哪個進程?


  1. 打開命令提示符窗口(以管理員身份)從“開始\搜索框”輸入“cmd”,然後右鍵單擊“cmd.exe”並選擇“以管理員身份運行”

  2. 輸入以下文本,然後按Enter。

    netstat -abno

    -a顯示所有連接和偵聽端口。

    -b顯示創建每個連接或偵聽端口時涉及的可執行文件。 在某些情況下,眾所周知的可執行文件會託管多個獨立的組件,並且在這些情況下,會顯示創建連接或偵聽端口時涉及的組件序列。 在這種情況下,可執行文件的名稱位於底部的[]中,最上面是它所調用的組件,等到TCP / IP達到。 請注意,此選項可能非常耗時,並且會失敗,除非您擁有足夠的權限。

    -n以數字形式顯示地址和端口號。

    -o顯示與每個連接關聯的擁有進程ID。

  3. 在“本地地址”下找到您正在監聽的端口

  4. 直接查看進程名稱。

注意:在任務管理器下查找進程

  1. 請注意您正在查看的端口旁邊的PID(進程標識符)。

  2. 打開Windows任務管理器。

  3. 選擇進程選項卡。

  4. 查找在步驟1中執行netstat時記下的PID。

    • 如果您沒有看到PID列,請點擊查看/選擇列。 選擇PID。

    • 確保選中“顯示來自所有用戶的進程”。


netstat -a -o顯示在特定端口上運行的進程的PID。

請記住進程ID並轉到任務管理器和服務或詳細信息選項卡,並結束具有相同PID的進程。

因此,您可以殺死在Windows中的特定端口上運行的進程。


netstat -aonetstat -ab告訴你應用程序,但如果你不是管理員,你會得到“請求的操作需要提升”。

這並不理想,但是如果你使用Sysinternals Process Explorer,你可以轉到特定進程的屬性並查看TCP選項卡,看看它們是否使用你感興趣的端口。一針一針,草草的事情,但也許它會幫助別人....


使用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
    

只需打開一個命令shell並鍵入:(說你的端口是123456)

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

你會看到你需要的一切

標題是:

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

這正如here所提到的


如果你想用一個GUI工具來做到這一點,那就是TCPView


如果你想要一個GUI來使用TCPView 。 這是微軟收購的舊Sysinternals應用程序。


如果您運行以下命令,您可以獲得更多信息:

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

使用“查找”命令可以過濾結果。 發現/我“聆聽”將只顯示'聽'的端口。 請注意,您需要/我忽略Case,否則您會輸入find“LISTENING”。 | find“port”會將結果限制為僅包含特定端口號的結果。 請注意,在此它也將過濾在響應字符串中的任何位置具有端口號的結果。


如果端口更改不起作用:

步驟1:通過在Windows中搜索“服務”轉到服務。

步驟2:按字母順序排列所有服務(不必)

第3步:停止與MYSQL相關的任何服務。

第4步:從xampp啟動mysql。


對於那些使用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

我推薦NirSoft的CurrPorts

CurrPorts可以過濾顯示的結果。 TCPView沒有這個功能。

注意:您可以右鍵單擊進程的套接字連接並選擇“關閉選定的TCP連接”(您也可以在TCPView中執行此操作)。 這通常會修復我在切換VPN後與Outlook和Lync之間的連接問題。 使用CurrPorts,您還可以使用“/ close”參數從命令行關閉連接。


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

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

此答案最初發佈在此主題中


遵循以下工具: - 從cmd : - C:\> netstat -anob具有管理員權限的C:\> netstat -anob

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 /?

等等等等。 :)


C:\> netstat -a -b

(添加-n停止它試圖解析主機名,這會使它快很多)

注意Dane對TCPView的建議。 看起來非常有用!

-a顯示所有連接和偵聽端口。

-b顯示創建每個連接或偵聽端口時涉及的可執行文件。 在某些情況下,眾所周知的可執行文件會託管多個獨立組件,並且在這些情況下,會顯示創建連接或偵聽端口時涉及的組件序列。 在這種情況下,可執行文件的名稱位於底部的[]中,最上面是它所調用的組件,等到TCP / IP達到。 請注意,此選項可能非常耗時,並且會失敗,除非您擁有足夠的權限。

-n以數字形式顯示地址和端口號。

-o顯示與每個連接關聯的擁有進程ID。


netstat -aon | find /i "listening"




port