このページについて
Windows10環境に於いて、以下の方法をまとめています。
任意のポート番号が開放されているかを調べる
任意のポート番号が使用されているかを調べる
基本的には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.
0 件のコメント:
コメントを投稿