serverspec の Solaris 10 対応をちょこちょこやっていて、
port の確認に使われている nc (netcat) が標準で入らないということで、
変わりに使えるものがないか探していたところ、
mconnect というものが使えそう。
mconnect は man を見ると
NAME mconnect - connect to SMTP mail server socket
ということで、SMTP の接続確認用のコマンド。
mconnect [-p port] [-r] [hostname]
のように接続先ポートを指定でき、
mconnect -p 80 localhost
などとすれば、port 80 で待ち受けている httpd に接続することもできる。
引数なしで mconnect を実行すると以下のようになる。
$ mconnect connecting to host localhost (127.0.0.1), port 25 connection open 220 localhost.localdomain ESMTP Sendmail 8.14.4+Sun/8.14.4; Sun, 14 Jul 2013 06:17:47 +0900 (JST) quit # 入力 221 2.0.0 localhost.localdomain closing connection
ユーザからの入力待ちになるが、ユーザからの入力を受け付けるのは 1 回のみなので、
ここで smtp のコマンドを叩いてメールを送ったりはできない。
上のままだと入力待ちになってしまうので、serverspec のテストに使えないので、
パイプで quit を送ってみる。
$ echo 'quit' | mconnect ; echo $? connecting to host localhost (127.0.0.1), port 25 connection open 220 localhost.localdomain ESMTP Sendmail 8.14.4+Sun/8.14.4; Sun, 14 Jul 2013 06:21:18 +0900 (JST) 221 2.0.0 localhost.localdomain closing connection 0
また、使われていない適当なポートを指定して、
接続できない場合は 0 以外の exit status が返ってくることを確認する。
$ echo 'quit' | mconnect -p 9999; echo $? connecting to host localhost (127.0.0.1), port 9999 connect: Connection refused 255
255 が返ってきているので、テストに使える。
同じように port 80 (http) に接続すると以下のようになる。
$ echo 'quit' | mconnect -p 80; echo $? connecting to host localhost (127.0.0.1), port 80 connection open <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> <html><head> <title>501 Method Not Implemented</title> </head><body> <h1>Method Not Implemented</h1> <p>quit to /index.html not supported.<br /> </p> </body></html> 0
quit なんてメソッドはないって言われるけど、
ポートに接続できているので exit code は 0 が返ってきていて
テスト上は問題ないので気にしない方向で。