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 が返ってきていて
テスト上は問題ないので気にしない方向で。