Windowsのポートでリッスンしているプロセスを確認するにはどうすればよいですか?


2274

Windowsのポートでリッスンしているプロセスを確認するにはどうすればよいですか?


3
Currportsは、検索とフィルターに役立つツールですnirsoft.net/utils/cports.html
Blue Clouds

1
IntelliJでデバッグモードでTomcatを実行しようとしているときにこれに遭遇しました。デバッグ転送構成(ファイル->設定->ビルド/実行/展開->デバッガー)を「ソケット」から"共有メモリ"。
TMN

回答:


2624

新しい答え、Powershell

Get-Process -Id (Get-NetTCPConnection -LocalPort portNumber).OwningProcess

古い答え、cmd

 C:\> netstat -a -b

-nを追加して、ホスト名を解決しようとするのを停止します。これにより、処理速度が大幅に向上します。)

TCPViewに対するDaneの推奨事項に注意してください。とても便利に見えます!

-a すべての接続とリスニングポートを表示します。

-b 各接続またはリスニングポートの作成に関連する実行可能ファイルを表示します。よく知られた実行可能ファイルが複数の独立したコンポーネントをホストする場合があり、これらの場合、接続またはリスニングポートの作成に関係するコンポーネントのシーケンスが表示されます。この場合、実行可能ファイルの名前は下部の[]にあり、上部はそれが呼び出したコンポーネントで、TCP / IPに到達するまで同様です。このオプションは時間がかかる可能性があり、十分な権限がないと失敗することに注意してください。

-n アドレスとポート番号を数値形式で表示します。

-o 各接続に関連付けられた所有プロセスIDを表示します。


252
-oでPIDを取得
Laurent K

121
そしてtaskkill / PID <pid>は、適切な場合は/ Fを使用してプロセスを終了します。
BitMask777 2013年

81
管理者としてコマンドラインシェルを実行する必要がある場合があります。そうしないと、権限が不十分であることに関するエラーメッセージが表示される場合があります。cmd.exeを右クリックするときに、「管理者として実行」オプションを使用します。
グルーバー2014

6
機能しますが、高い権限が必要です。Shift +コマンドアイコンを右クリック->管理者として実行
Christian Bongiorno

18
PIDを取得したら(そうだとしましょう)、プロセスの名前やその他の詳細を確認1234できtasklist /fi "pid eq 1234"ます。
スティーブチェンバーズ

2203

WindowsにはネイティブGUIがあります。

  • スタートメニュー→ すべてのプログラムアクセサリシステムツールリソースモニター

または、実行 resmon.exe、またはタスクマネージャーのパフォーマンスタブから。

Enter image description here


41
バインディングのファイアウォールステータスも表示されます(最後の列)。非常に実用的です。
ラファエル14

8
これを実行するには、管理者(またはそのグループのメンバー)である必要があります。
KrishPrabakar

2
@bcorso、「unspecified address」へのバインドはどういう意味ですか?
パセリエ2016年

5
(他のバージョンをチェックしていません。)少なくともWindowsの10で、タスクマネージャの[パフォーマンス]タブからもを起動することができます
マチューK.

10
上記の@ user4836454のコメントは正しくありません。リソースモニターは、これらのポートへのネットワーク接続がない場合でも、リスナー付きのポートを表示します。「TCP接続」セクションの代わりに「リスニングポート」セクションを調べてください。
Jpsy 2017

235

このためのGUIが必要な場合は、TCPViewを使用してください。これは、Microsoftが買収した古いSysinternalsアプリケーションです。


9
特に、すべてのプロセスが同じリストにあり、プロセスを右クリックして直接閉じることができるため、これは私にとって最良のオプションです。
Andreas Lundgren、2016年

8
また、これは管理者特権を必要としません!
Janac Meena 2018

222

Windowsの場合:

netstat -aon | find /i "listening"

25
+1ただし、Windowsが英語以外の言語で実行されている場合は、「リスニング」をネイティブ用語に変更する必要があります。たとえばnetstat -aon | find /i "abhören"ドイツ語。
Levite 2014年

2
私の場合、引用符記号が原因で機能しなかった可能性がありますが、ソリューションnetstat -aon | findstr LISTENINGは完璧に動作します!
ゴッドファーザー

これは、昇格された特権を必要とせずに機能します。
Vlad Schnakovszki 2017年

1
PowerShellを使用してW10 15063.729でこのコマンドを実行しようとすると、エラーが発生します:FIND: Parameter format not correct
Nicke Manarin

1
この回答は、「Windowsのポートでリッスンしているプロセス[name]を見つける」とどのように関連していますか?
Pawel Cioch

137

ほとんどの回答で言及されている-bスイッチでは、マシンの管理者権限が必要です。プロセス名を取得するために昇格された権限は必要ありません!

ポート番号(たとえば、8080)で実行されているプロセスのpidを見つけます。

netstat -ano | findStr "8080"

pidでプロセス名を見つける

tasklist /fi "pid eq 2216"

find process by TCP/IP port


82

次のコマンドを実行すると、詳細情報を取得できます。

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

「検索」コマンドを使用すると、結果をフィルタリングできます。find /i "listening"「リスニング」しているポートのみを表示します。/i大文字と小文字を区別する必要があることに注意してください。そうでない場合は、「listening」と入力します。| find "port"結果は、特定のポート番号を含むもののみに制限されます。これについては、応答文字列のどこかにポート番号がある結果もフィルタリングすることに注意してください。


8
FWIWがこれをPowerShell v2.0で実行しようとすると、エラーが発生しますFIND: Parameter format not correct。検索条件の後にスペースを追加する必要があります。これにより、が残りますnetstat -aon | find /i "listening" | find "1234 "
自己。

2
上記の「ポート」を自分のポートに置き換えます。例:「5000」
jbooker

1
@自己。パイプの後にスペースを追加した後でも、PS 5.1でこのエラーが発生します。何が起こっているか知っていますか?
Nicke Manarin

2
@NickeManarinin&@selfは、最初にpowershellからcmdに変更する(cmdと入力してEnterキーを押してから、コマンドをやり直す)か、Powershellで代わりに次のコマンドを使用します。netstat -aon | find / i " {back tick}" listening {back tick}"" | find " {back tick}" port {back tick}" "(<-エスケープされた引用符に注意してください- back tick実際のキャラクターを追加すると、それが省略であると考えるため、用語を許しません)
Tristan van Dam

72
  1. コマンドプロンプトウィンドウを開きます(管理者として)「スタート\検索ボックス」から「cmd」と入力し、「cmd.exe」を右クリックして「管理者として実行」を選択します。

  2. 次のテキストを入力して、Enterキーを押します。

    netstat -abno

    -a すべての接続とリスニングポートを表示します。

    -b 各接続またはリスニングポートの作成に関連する実行可能ファイルを表示します。よく知られた実行可能ファイルが複数の独立したコンポーネントをホストする場合があり、これらの場合、接続またはリスニングポートの作成に関係するコンポーネントのシーケンスが表示されます。この場合、実行可能ファイルの名前は下部の[]にあり、上部はそれが呼び出したコンポーネントで、TCP / IPに到達するまで同様です。このオプションは時間がかかる可能性があり、十分な権限がないと失敗することに注意してください。

    -n アドレスとポート番号を数値形式で表示します。

    -o 各接続に関連付けられた所有プロセスIDを表示します。

  3. "ローカルアドレス"でリッスンしているポートを探します

  4. その直下のプロセス名を見てください。

注:タスクマネージャでプロセスを見つけるには

  1. 表示しているポートの横にあるPID(プロセスID)に注意してください。

  2. Windowsタスクマネージャを開きます。

  3. [プロセス]タブを選択します。

  4. 手順1でnetstatを実行したときにメモしたPIDを探します。

    • PID列が表示されない場合は、[表示/列の選択]をクリックします。PIDを選択します。

    • 「すべてのユーザーのプロセスを表示する」が選択されていることを確認します。


56

PIDとイメージ名を取得する

コマンドは1つだけ使用してください。

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はその行の5th番目の要素です)、次のコマンドに渡されます

    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

2
良い答えfindstr :9000ですが、そうでない場合は変更する必要があります。番号が含まれているアプリも見つかります(たとえば、「80」を検索すると、ポート80、800、8000のアプリも見つかります)。
Radon8472

48

最初に、ポートを解放するために削除する必要がある特定のタスクのプロセスIDを見つけます。

タイプ

netstat -n -a -o

Windowsコマンドラインプロンプト(cmd)でこのコマンドを実行した後、最後の列と思われるpidを選択します。これが3312だとします。

今タイプしてください

taskkill /F /PID 3312

これで、netstatコマンドを入力してクロスチェックできます。

注:Windowsでは、このコマンドを直接CMDで実行できない場合があるため、最初に次の手順を実行する必要があります。

スタートメニューから->コマンドプロンプト(コマンドプロンプトを右クリックし、管理者として実行)


30

各接続に関連付けられているすべての所有プロセスIDのリストを取得するには:

netstat -ao |find /i "listening"

プロセスを強制終了する場合は、IDがあり、このコマンドを使用して、ポートを解放します。

Taskkill /F /IM PID of a process

1
これはUDPポートのリッスンを考慮していません
evandrix

27

WindowsのPIDからポート番号を取得するのは非常に簡単です。

手順は次のとおりです。

  1. 実行に移動→cmdと入力→を押しEnterます。

  2. 次のコマンドを書きます...

    netstat -aon | findstr [port number]
    

    (注:大括弧は含めないでください。)

  3. 押すEnter...

  4. 次に、cmdは、そのポートで実行されているサービスの詳細とPIDを提供します。

  5. タスクマネージャーを開き、サービスタブをクリックして、PIDとcmdのPIDを一致させます。


18

コマンドシェルを開いて、次のように入力します(たとえば、ポートは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

これはここで述べたとおりです


1
参考までに/興味のある方へ:(findstr 123456引用符なし)またはfind "123456"(引用符付き)のいずれかです。(@Josh)
Kevin Cruijssen 2018年

18

特定のプロセス(PID)がどのポートを使用しているかを調べるには、次のようにします。

netstat -anon | findstr 1234

1234はプロセスのPIDです。[タスクマネージャー→[サービス/プロセス]タブに移動して、アプリケーションのPIDを確認します。]


1
-nフラグを2回設定する必要がないことに注意してください。-ano十分です
mwieczorek

16

Windows 10またはWindows Server 2016上のPowerShell 5を使用して、 Get-NetTCPConnectionコマンドレットをます。古いバージョンの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
    


13

次のコマンドを入力します。 netstat -aon | findstr :DESIRED_PORT_NUMBER

たとえば、ポート80を見つけたい場合: netstat -aon | findstr :80

この回答はもともとこの質問に投稿されました。


11

Netstat:

  • -aはすべての接続ポートとリスニングポートを表示します
  • -bは実行可能ファイルを表示します
  • -nホスト名の解決を停止(数値形式)
  • -o所有プロセス

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

Currportsツールは、検索およびフィルタするのに役立ちます


11
  1. コマンドプロンプトを開きます-スタート→ 実行cmd、またはスタートメニュー→ すべてのプログラムアクセサリコマンドプロンプト

  2. タイプ

    netstat -aon | findstr '[port_number]'
    

[port_number]を、チェックしてヒットする実際のポート番号に置き換えますEnter

  1. ポートがいずれかのアプリケーションで使用されている場合は、そのアプリケーションの詳細が表示されます。リストの最後の列に表示される番号は、そのアプリケーションのPID(プロセスID)です。これを書き留めてください。
  2. タイプ

    tasklist | findstr '[PID]'
    

[PID]上記の手順の番号に置き換えて、を押しEnterます。

  1. ポート番号を使用しているアプリケーション名が表示されます。

3
Win 10の場合:ステップ2およびステップ4のコマンドは、単純な引用符を二重引用符で置き換えない限り機能しません。netstat -aon | findstr "[port_number]"
レオナルドロペス

このソリューションでは、昇格したアクセス許可は必要ありません。Tks!
Totalys

10

netstat -aoそしてnetstat -abあなたにアプリケーションを教えてください、しかしあなたがシステム管理者でないならあなたは「要求された操作は昇格が必要です」を得るでしょう。

これは理想的ではありませんが、SysinternalsのProcess Explorerを使用している場合は、特定のプロセスのプロパティに移動し、[TCP]タブを調べて、目的のポートを使用しているかどうかを確認できます。事が、多分それは誰かを助けるでしょう...


管理者でない場合は、Process Explorer(またはWindowsタスクマネージャー>リソースマネージャー)を使用して、そもそも自分以外のプロセスからこの情報を取得することはできません。
アベル

9

NirSoftのCurrPortsをお勧めします。

CurrPortsは表示された結果をフィルタリングできます。TCPViewはこの機能はありません。

注:プロセスのソケット接続を右クリックして、[選択したTCP接続を閉じる]を選択できます(これはTCPViewでも実行できます)。これにより、VPNを切り替えた後、OutlookとLyncで発生する接続の問題が解決することがよくあります。CurrPortsでは、 "/ close"パラメータを使用してコマンドラインから接続を閉じることもできます。


7

私に役立つ単一行のソリューションはこれです。ポートを3000に置き換えてください:

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

編集:変更killStop-ProcessよりPowerShellのような言語のために


6
おそらく、プロセスを自動的に強制終了したくないでしょう。そのkillコマンドを分離して説明します。よく考えずに、貧弱なユーザーがコピーして貼り付けたくないのです。
TinkerTenorSoftwareGuy

1
また、完全なPowerShellソリューションを使用する場合は、killをStop-Processに変更します Get-Process -Id (Get-NetTCPConnection -LocalPort 3000).OwningProcess | Stop-Process
CubanX

6

これらのツールに従ってください:からCMDC:\> netstat -anob管理権限。

プロセスエクスプローラー

プロセスダンプ

ポートモニター

すべてsysinternals.comから。

実行中のプロセスと各プロセスでのスレッドを知りたいだけの場合は、 wmic。それはあなたがあなたが知ることができないより多くをあなたに与える素晴らしいコマンドラインツールです。

例:

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

上記のコマンドは、5秒ごとに簡単に全プロセスリストを表示します。詳細/?については、Windowsのコマンドを使用するだけです。たとえば、

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

などなど。:)


PortMon(Port Monitorの背後にあるリンク)は、ネットワークポートではなく、シリアルポートとパラレルポートを監視するためのものです。
ジェームズ

6

使用する:

netstat -a -o

これは、特定のポートで実行されているプロセスのPIDを示しています。

プロセスIDを覚えて、タスクマネージャーとサービスまたは詳細タブに移動して、同じPIDを持つプロセスを終了します。

したがって、Windowsの特定のポートで実行されているプロセスを強制終了できます。


6

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


5

PowerShellを使用しています... ...これはあなたの友人です(8080をあなたのポート番号に置き換えてください):

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

出力例

>   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行を出力します。

2

Windowsの場合、リッスンしているものやポート1234に接続されているものを検索するには、cmdプロンプトで次のコマンドを実行します。

netstat -na | find "1234"

1

引数としてプロセス名を受け取り、プロセスの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

1

infokillを使用した回答に基づいて、私にとっては、1つのコマンドにそれらを組み合わせると便利です。そして、これを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"

ファイル portKill.bat

for /f "tokens=3 delims=LISTENING" %%i  in (
    'netstat -ano ^| findStr "%1" ^| findStr "["'
) do @Taskkill /F /IM %%i

次に、cmdからこれを行うことができます。

portInfo.bat 8080

または

portKill.bat 8080


1
これは便利なスクリプトかもしれません。しかし、私はそれをCMDとPowerShell 6で試したが運が悪かった。おそらく、もう少し詳細を提供することで、回答を改善できます。
Manfred

最初の部分は機能していますか?「コウモリ」だけの問題ですか?変数の受け渡しにはいくつかの違いがあります:(%% i)
lczapski '21 / 12/19

私は、例えば3別のWindows 10上でこれを試してみました@Manfred .\portInfo.bat 800:それはこのような何かを与えるPowerShellでC:\work>for /F "tokens=3 delims=LISTENING" %i in ('netstat -ano | findStr "800" | findStr "["') do (tasklist /fi "pid eq %i" ) C:\work>(tasklist /fi "pid eq 4" ) Image Name PID Session Name Session# Mem Usage ========================= ======== ================ =========== ============ System 4 Services 0 1,820 K
lczapski

すみません、運はありません。そのコマンドをportInfo.batpowershellターミナルで名前が付けられたファイルに入れてから実行しました.\portInfo.bat 8080。出力はバッチファイルの内容だけでした。非常によく私は何かを見落としている可能性があります。Windows 10でPowerShell 6.2.3を使用していることに注意してください。通常のコマンドプロンプトでも試してみましたが、結果は同じでした:スクリプトの内容の出力。これを機能させるための重要な情報が欠けていると私は確信しています。
Manfred

1
なぜ追加しませんか/nh@tasklist /nh /fi "pid eq %i"?そして、正確にドア:Findstr ":8080"
それは私ではなかった

0

私の場合、ポート(3000)はまったく使用されておらず、netstatにも表示されません。だが!Windows用のアンインストーラーDockerが問題を解決しました。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.