[whois] Unable to connect to remote host への対処

November 27, 2013

二回も遭遇したのでメモとして書いとく。 原因は ipv6 を用いて通信しようとしてしまうため。ipv6が正常に使えるなら問題なし。 でも、whois するサーバが ipv6 に対応してない、または通信の経路でipv6通信に失敗する環境だとエラーが起きる。

patch を当ててコンパイルして直します。

cd /usr/local/src/
wget http://ftp.de.debian.org/debian/pool/main/j/jwhois/jwhois_4.0.orig.tar.gz
tar xzvf jwhois_4.0.orig.tar.gz
cd jwhois-4.0/
wget http://www.fukatani.org/~hi-lo/blog/archives/upload_data/jwhois-4.0-fix-ipv6socket.patch
patch -p1 < jwhois-4.0-fix-ipv6socket.patch
mkdir /usr/local/jwhois
./configure --prefix=/usr/local/jwhois/
make -j4
make install
/usr/local/jwhois/bin/whois topotal.com
which whois
ll /usr/bin/whois
mv /usr/bin/whois{,.`date +%Y%m%d`}
ln -s /usr/local/jwhois/bin/jwhois /usr/bin/whois
whois topotal.com
view raw build_jwhois.sh hosted with ❤ by GitHub

参考: whois のソース

パッチの内容

$ cat jwhois-4.0-fix-ipv6socket.patch
diff -ur jwhois-4.0/src/utils.c jwhois-4.0-dn/src/utils.c
--- jwhois-4.0/src/utils.c 2007-06-26 03:00:20.000000000 -0400
+++ jwhois-4.0-dn/src/utils.c 2008-05-20 07:56:42.000000000 -0400
@@ -288,7 +288,7 @@
retlen = sizeof(retval);
error = getsockopt(sockfd, SOL_SOCKET, SO_ERROR, &retval, &retlen);
- if (error < 0 || retval)
+ if (error == 0 && retval == 0)
{
break;
}

ついでに、監視プラグインも修正した。

cp -a /usr/lib64/nagios/plugins/check_domain.sh{,.`date +%Y%m%d`}
vim /usr/lib64/nagios/plugins/check_domain.sh
$ diff /usr/lib64/nagios/plugins/check_domain.sh{,.`date +%Y%m%d`}
91c91
<         expiration=`$whois $host $domain | awk '/Expiration Date:/ { print $5 }'`
---
>         expiration=`$whois $host $domain | awk '/Expiration Date:/ { print $3 }'`

Profile picture

Written by Narimichi Takamura (@nari_ex) who works at Topotal as CEO. He love engineering and fighting game.