telnetコマンドが入っていないWindowsサーバでポートが開いてるか確認したいときの確認方法です。
最近のunixならpythonやperlが標準で使えることが多いですが、Windowsの選択肢としてはVBSかPowerShellなのでここではPowerShellでやってみます。
やってる内容はPowerShellでTCPのソケットを生成してその結果を確認しているだけなので、unix上のLLでも同様のやり方で出来るかと思います。
#手順
##前準備
PowerShell起動
C:\>powershell
Windows PowerShell
Copyright (C) 2009 Microsoft Corporation. All rights reserved.
TCPクライアントオブジェクト生成(socket生成)
PS C:\> $tc = New-Object System.Net.Sockets.tcpClient
##ポートが空いているとき
ターゲットへ接続(IP/ホスト、ポート番号)
PS C:\> $tc.connect("192.168.0.1", 80)
状態確認(接続可能ならTrueが返る)
PS C:\> $tc.connected
True
オブジェクトの解放
PS C:\> $tc.close()
##ポートが空いてないとき
PS C:\> $tc = New-Object System.Net.Sockets.tcpClient
PS C:\> $tc.connect("192.168.0.1", 81)
"2" 個の引数を指定して "Connect" を呼び出し中に例外が発生しました: "対象のコン
ピューターによって拒否されたため、接続できませんでした。 192.168.0.1:81"
発生場所 行:1 文字:12
+ $tc.connect <<<< ("192.168.0.1", 81)
+ CategoryInfo : NotSpecified: (:) []、MethodInvocationException
+ FullyQualifiedErrorId : DotNetMethodException
コネクション状態がFalse
PS C:\> $tc.connected
False
#要するに
$tc = New-Object System.Net.Sockets.tcpClient
$tc.connect(ターゲット, ポート)
$tc.connected
の3行です。
Trueならポートが開いている、Falseなら開いていないことが確認できます。
顧客サーバなど他のアプリケーションやスクリプトを導入出来ない環境でアドホックに確認するときに使えるかと思います。