2013-07-14 Sun

[別の年の同じ日: 2002 2003 2005 2006 2007 2008 2009 2015

mconnect はてぶ

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