WindowsのTCPまたはUDPポートでリッスンしているプロセスをどのように確認できますか?
34 に答える
新しい答え、PowerShell
TCP
Get-Process -Id (Get-NetTCPConnection -LocalPort YourPortNumberHere).OwningProcess
UDP
Get-Process -Id (Get-NetUDPEndpoint -LocalPort YourPortNumberHere).OwningProcess
古い答え、cmd
C:\> netstat -a -b
( -nを追加して、ホスト名を解決しようとするのを停止します。これにより、処理が大幅に高速化されます。)
TCPViewに関するDaneの推奨事項に注意してください。とても便利そうです!
-a すべての接続とリスニングポートを表示します。
-b 各接続またはリスニングポートの作成に関連する実行可能ファイルを表示します。よく知られている実行可能ファイルが複数の独立したコンポーネントをホストしている場合もあります。この場合、接続またはリスニングポートの作成に関係するコンポーネントのシーケンスが表示されます。この場合、実行可能ファイル名は下部の[]にあり、上部は呼び出されたコンポーネントであり、TCP/IPに到達するまで続きます。このオプションは時間がかかる可能性があり、十分な権限がないと失敗することに注意してください。
-n アドレスとポート番号を数値で表示します。
-o 各接続に関連付けられている所有プロセスIDを表示します。
Windows 用のネイティブ GUI があります。
スタートメニュー →すべてのプログラム→アクセサリ→システムツール→リソースモニター
または実行
resmon.exe
、またはタスクマネージャー→パフォーマンスタブから。
Windowsの場合:
netstat -aon | find /i "listening"
このためのGUIが必要な場合は、TCPViewを使用してください。これは、Microsoftが買収した古いSysinternalsアプリケーションです。
次のコマンドを実行すると、詳細情報を取得できます。
netstat -aon | find /i "listening" |find "port"
「検索」コマンドを使用すると、結果をフィルタリングできます。find /i "listening"
「リッスン」しているポートのみが表示されます。大文字と小文字を区別しない必要があることに注意してください/i
。それ以外の場合は、find "LISTENING" と入力します。| find "port"
結果を特定のポート番号を含むものだけに制限します。これについては、応答文字列のどこかにポート番号を持つ結果もフィルタリングされることに注意してください。
コマンドプロンプトウィンドウを(管理者として)開く 「スタート\検索ボックス」から「cmd」と入力し、「cmd.exe」を右クリックして「管理者として実行」を選択します
次のテキストを入力し、Enter キーを押します。
netstat -abno
-a すべての接続とリッスン ポートを表示します。
-b 各接続またはリスニング ポートの作成に関連する実行可能ファイルを表示します。既知の実行可能ファイルが複数の独立したコンポーネントをホストする場合があり、このような場合、接続またはリスニング ポートの作成に関与する一連のコンポーネントが表示されます。この場合、実行可能ファイルの名前は一番下の [] にあり、一番上に呼び出されたコンポーネントがあり、TCP/IP に到達するまで続きます。このオプションは時間がかかる可能性があり、十分な権限がない場合は失敗することに注意してください。
-n アドレスとポート番号を数値形式で表示します。
-o 各接続に関連付けられた所有プロセス ID を表示します。
「ローカルアドレス」の下でリッスンしているポートを見つけます
その直下のプロセス名を見てください。
注: タスク マネージャーでプロセスを見つけるには
見ているポートの横にある PID (プロセス識別子) に注意してください。
Windows タスク マネージャーを開きます。
[プロセス] タブを選択します。
ステップ 1 で netstat を実行したときにメモした PID を探します。
PID 列が表示されない場合は、[View / Select Columns] をクリックします。PID を選択します。
「すべてのユーザーのプロセスを表示」が選択されていることを確認します。
まず、ポートを解放するために削除する必要がある特定のタスクのプロセス ID を見つけます。
タイプ
netstat -n -a -o
Windows コマンド ライン プロンプト (cmd) でこのコマンドを実行した後、最後の列と思われる pid を選択します。これが 3312 だとします。
今すぐ入力
taskkill /F /PID 3312
netstat
コマンドを入力してクロスチェックできるようになりました。
注: Windows では、このコマンドを CMD で直接実行できない場合があるため、最初に次の手順を実行する必要があります。
スタートメニューから→コマンドプロンプト(コマンドプロンプトを右クリックし、管理者として実行)
各接続に関連付けられているすべての所有プロセス ID のリストを取得するには:
netstat -ao |find /i "listening"
任意のプロセスを強制終了する場合は、ID を持っていて、このコマンドを使用すると、ポートが解放されます
Taskkill /F /IM PID of a process
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
どの特定のプロセス (PID) がどのポートを使用しているかを調べるには:
netstat -anon | findstr 1234
1234 はプロセスの PID です。[[タスク マネージャー] → [サービス/プロセス] タブに移動して、アプリケーションの PID を確認します。]
GUIツールを使用してこれを実行する場合は、SysinternalsのTCPViewがあります。
次のコマンドを入力します。netstat -aon | findstr :DESIRED_PORT_NUMBER
たとえば、ポート 80 を見つけたい場合:netstat -aon | findstr :80
この回答は、もともとこの質問に投稿されました。
Windows の既定のシェル (powershell) を使用し、外部アプリを使用しない
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
次のツールに従ってください: cmdから:管理者権限C:\> netstat -anob
で。
すべてsysinternals.comから。
実行中のプロセスと各プロセスの下のスレッドを知りたいだけなら、について学ぶことをお勧めしwmic
ます。これは素晴らしいコマンドライン ツールであり、あなたが知っている以上のことを提供してくれます。
例:
c:\> wmic process list brief /every:5
上記のコマンドは、すべてのプロセスのリストを 5 秒ごとに簡潔に表示します。詳細について/?
は、 windows のコマンドを使用できます。たとえば、次のようにします。
c:\> wmic /?
c:\> wmic process /?
c:\> wmic prcess list /?
などなど。:)
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 行出力します。
以下のコマンドで予約済みポートを確認することもできます。たとえば、Hyper-V はいくつかのポートを予約します。
netsh int ipv4 show excludedportrange protocol=tcp
パワーシェル
概要を把握したい場合は、これを使用できます。
Get-NetTCPConnection -State Listen | Select-Object -Property *, `
@{'Name' = 'ProcessName';'Expression'={(Get-Process -Id $_.OwningProcess).Name}} `
| select ProcessName,LocalAddress,LocalPort
次のようなテーブルを取得するよりも:
ProcessName LocalAddress LocalPort
----------- ------------ ---------
services :: 49755
jhi_service ::1 49673
svchost :: 135
services 0.0.0.0 49755
spoolsv 0.0.0.0 49672
udp の場合は次のとおりです。
Get-NetUDPEndpoint | Select-Object -Property *, `
@{'Name' = 'ProcessName';'Expression'={(Get-Process -Id $_.OwningProcess).Name}} `
| select ProcessName,LocalAddress,LocalPort