他のサーバとなんらかの通信を行う場合、ファイアウォールによって接続が遮断されているか確認することがよくある。 この際使用するのがtelnetである。tenetによって、ポートがオープンになっているかの確認を実施する。コマンドは以下のとおり。(windowsで実行する場合も同じ構文)
telnet {ホスト名もしくはIPアドレス} {ポート番号}
サンプル
$ telnet amateras 80
Trying 10.18.245.134...
Connected to amateras. <- 接続成功
Escape character is '^]'.
<- プロンプトがオープン状態になる。CTRL + "]" を押下すると抜けられる
telnet> quit <- 最後にquitで終了
Connection closed
ちなみにファイアウォールでポートが開放されていない場合、以下のようにタイムアウトになる。
エラーの場合1$ telnet amateras 80
Trying 10.18.245.134...
telnet: connect to address 10.18.245.134: Connection timed out<- 接続タイムアウト
ポートが開放されているが、サービスが起動していない場合は、Connection refusedとなる。
エラーの場合2$ telnet amateras 80
Trying 10.18.245.134...
telnet: connect to address 10.18.245.134: Connection refused<- 接続拒否
curlコマンドでも同じように接続確認が可能。telnetがインストールされてない場合にも使えるので便利。コマンド構文は以下のとおり。
curl -v telnet://{ホスト名もしくはIPアドレス}:{ポート番号}
サンプル
$ curl -v telnet://amateras:80
* About to connect() to amateras port 80 (#0)
* Trying 10.18.245.134... connected <- 接続成功
* Connected to amateras (10.18.245.134) port 80 (#0)
<- プロンプトがオープン状態になる。CTRL + "]" を押下すると抜けられる
ファイアウォールでポートが開放されていない場合、タイムアウトになる。
エラーの場合1$ curl -v telnet://amateras:80
* About to connect() to amateras port 80 (#0)
* Trying 10.18.245.134... Connection timed out <- 接続タイムアウト
* couldn't connect to host
* Closing connection #0
curl: (7) couldn't connect to host
ポートが開放されているが、サービスが起動していない場合は、Connection refusedとなる。
エラーの場合2$ curl -v telnet://amateras:80
* About to connect() to amateras port 80 (#0)
* Trying 10.18.245.134... Connection refused <- 接続拒否
* couldn't connect to host
* Closing connection #0
curl: (7) couldn't connect to host
Linuxではないが、WindowsのPowerShellでも接続確認ができる。やや面倒だが、こちらもtelnetが使えない場合に代替策として利用できる。
サンプル$tc = New-Object System.Net.Sockets.TcpClient
$tc.connect("amateras", 80)
$tc.connected
True <- 接続成功(接続失敗の場合はFalseになる)
$tc.close()