Windows10環境で任意のポート番号が使用されているか調べたい

2021/02/22

develop PC Powershell Windows10 WindowsServer ポート

t f B! P L

このページについて

Windows10環境に於いて、以下の方法をまとめています。

  1. 任意のポート番号が開放されているかを調べる

  2. 任意のポート番号が使用されているかを調べる

基本的にはPowershell等のコマンドを使用していきます。

ポート番号が開放されているか否かを判断する方法

ポート番号がファイアウォール等でブロックされているかを確認します。

Test-NetConnectionコマンドを使用します。

Test-NetConnection (NetTCPIP) | Microsoft Docs

Test-NetConnection
    [[-ComputerName] <String>]
    -Port <Int32>
    [-InformationLevel <String>]
    [<CommonParameters>]

このコマンドにより、任意のIPアドレスに対して、任意のポートでTCP通信ができるか否かがテストできます。

Powershellを開き、下記コマンドを投入します。

Test-NetConnection [ターゲットIP] -Port [ポート番号]

出力結果「TcpTestSucceeded」の値が、"True"であれば、TCP通信可能です。

UDPではない点には注意してください。

ポート番号が使用されているかを確認する

従来であれば、DOSプロンプトからnetstatコマンドを使用するのが定番ですが、今はPowershellを使用するほうがスマートでしょう。

例えば、135番ポートが現在使用されているか否かを確認したい場合、

古来からのnetstatコマンドを使用する方法では、下記のようなコマンドで調べていました。

netstat -nao|find "135"

上記の例だと、行末の1164がPIDになります。

このPIDをtasklistコマンドで検索することで、プロセスの詳細がわかります。

これも古来からのtasklistコマンドで、確認できます。

tasklist /fi "PID eq 1164"

135番ポートを使用しているPID 1164のプロセスは、svchost.exeであることがわかります。

この場合は、サービスなので詳細が知りたいですね。

それは先程のtasklistコマンドに、/svcオプションを付けることで確認できます。

tasklist /svc /fi "PID eq 1164"

先のsvchost.exeが、サービス名「RpcEptMapper, RpcSs」であることが確認できました。

ポート番号が使用されているかを確認する(Powershell)

先程の方法をPowershellでやってみます。

netstatコマンドの代わりに、Get-NetTCPConnection コマンドレットを使用します。

Get-NetTCPConnection (NetTCPIP) | Microsoft Docs

Get-NetTCPConnection
 [[-LocalAddress] <String[]>]
 [[-LocalPort] <UInt16[]>]
 [-RemoteAddress <String[]>]
 [-RemotePort <UInt16[]>]
 [-State <State[]>]
 [-AppliedSetting <AppliedSetting[]>]
 [-OwningProcess <UInt32[]>]
 [-CreationTime <DateTime[]>]
 [-OffloadState <OffloadState[]>]
 [-CimSession <CimSession[]>]
 [-ThrottleLimit ]  [-AsJob]  []

代表的な使い方としては下記の通り。

開いているポートの一覧

Get-NetTCPConnection -State Listen

任意のポートを確認する(例は135Port)

Get-NetTCPConnection -LocalPort 135

ただし、このGet-NetTCPConnectionは、PIDが一覧で表示されません。とはいえ値自体は.OwningProcessプロパティが持っているので、深刻な問題ではありません。

PIDを参照する(例は135Port)

(Get-NetTCPConnection -LocalPort 135).OwningProcess

PID 1164であることが確認できます。

このプロセスの情報を確認してみましょう。

プロセス情報を表示する(例は135Port)

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

svchostがプロセス名であることが確認できました。

サービスと思われるので、前回同様、tasklistコマンドをPowershellから実行しても良いのですが、今回はPowershellを使っていますし、折角ですからコマンドレットで確認してみましょう。

PID 1164のサービス情報を確認してみます。

シンプルに、定番のGet-WmiObject コマンドレットを使って、Win32_Service からPID 1164を検索する方法を使います。

Get-WmiObject Win32_Service | select ProcessId,DisplayName, Name, Pathname, StartMode, Started | Where-Object {$_.ProcessId -eq 1164}

あと一息です。

毎回PIDを調べてコピペするのは面倒なので、任意ポート番号からPIDを取得したコマンドと連結します。1164が2行返っていた箇所は、Get-uniqueで丸めています。

Get-WmiObject Win32_Service | select ProcessId,DisplayName, Name, Pathname, StartMode, Started | Where-Object {$_.ProcessId -eq (((Get-NetTCPConnection -LocalPort 135).OwningProcess) | Get-Unique)}

ポート135番を使用しているのが、「RPC Endpoint Mapper」と、「Remote Procedure Call (RPC)」であることがわかりました。



Written with StackEdit.

自己紹介

自分の写真
カレー好きなおっさんです。いい年してるので、ほんのりやさぐれています。

GamerProf.

人気の投稿

QooQ