Windows PowerShell v4以降ではTest-NetConnection
コマンドレットが提供されているため、こちらを利用してTCPポートの疎通確認が簡単に確認できますが。
たまにWindows PowerShell v4より前の環境をさわることがあるため、そんなときに確認する方法をまとめておきます。
telnetコマンドを利用する
# telent [対象のIPアドレスまたはホスト名] [ポート番号] で確認できる
telnet 192.0.2.100 3389
上記のコマンドで疎通できる場合はブランク画面になります。
ブランク画面から抜けるにはエスケープ文字CTRL+]
でコマンドモードに戻るのでそこでquitを実行すれば抜けられます。
なお上記コマンドで疎通失敗する場合は下記のようになります。
以下、メモ
Windows Server 2003の場合はtelnetコマンドが標準でインストールされているため、デフォルトでtelnetコマンドを利用でき疎通確認を行える。
Windows Server 2008 以降はtelnetコマンドが標準でインストールされなくなったため、Windowsの機能と追加からtelnet クライアント
を追加してからtelnetコマンドを利用する。
ちなみにWindows Server 2008はデフォルトのWindows PowerShellのバージョンが1.0。
Windows Server 2008 R2はデフォルトのWindows PowerShellのバージョンが2.0。
となっており、デフォルトでインストールされているWindows PowerShellではTest-NetConnectionはない。
PortQryコマンドを利用する
Download Center - PortQry Command Line Port Scanner Version 2.0
別途インストールが必要となりますが、マイクロソフトが提供しているツールとしてPortQryを利用してポートの確認ができます。
ダウンロードセンターからPortQryV2.exeをダウンロードして実行すると、ライセンスの確認とファイルの展開がされます。
展開先のフォルダにPortQry.exeがあるためこちらを利用して下記のようにポートチェックを実施できます。
# portqry -n [対象のIPアドレスまたはホスト名] -e [ポート番号]
PortQry.exe -n 192.0.2.100 -e 3389
#-nオプションでIPアドレスを指定すると、デフォルトでは逆引きを行うのでこれをスキップしたい場合は -nrオプションを指定
PortQry.exe -n 192.0.2.100 -e 3389 -nr
-nr
オプションなしのケース
-nr
オプションありのケース
PsPingコマンドを利用する
Sysinternalsで提供されいてるPsPingを使ってもポートチェックを行う事ができる。
Sysinternalsについて と Sysinternals Suiteのインストールについては 以前書いた下記記事参照(Sysinternals SuiteをインストールするとPsPingもインストールされます)
Sysinternals Suiteをwinget(msstore)からインストールしてみる
# psping [対象のIPアドレスまたはホスト名]:[ポート番号]
psping 192.0.2.100:3389
.Net frameworkのSystem.Net.Sockets.TcpClientを利用する
Windows PowerShell 4.0より前はTest-NetConnectionはありませんが、.Net frameworkのTcpClientクラスを利用してポートのチェックを実施できます。
.Net framework 2.0 TcpClient クラス
上記のようにWindows PowerShell 2.0などで使われる.Net framework 2.0にもTcpClientは用意されているのでこちらを利用します。
# ipアドレスとポートを指定
$target = "192.0.2.100"
$port = 3389
# TcpClientインスタンス初期化
$client = New-Object System.Net.Sockets.TcpClient
# TcpClient.Connect メソッドで接続
$client.Connect($target,$port)
# ConnectedがTrueかFalseでリモートホストに接続できたか判断
$client.Connected
# TcpClientインスタンス破棄
$client.Close()
上記コマンドで疎通確認ができます。
実態としては $client.Connect($target,$port)
部分で疎通できなければエラーが発生して接続できない事に気が付きますが、一応Connected でTrueだったら疎通OK、Falseだったら疎通NGと結果を確認しています。
総評
たまにWindowsでTest-NetConnectionがない環境をさわる。 そんなときにどうぞ。