PerlでDNS正引きするワンライナー

IO::Socket::INETモジュールのドキュメントによれば、接続先サーバを
IPアドレスでなくて、ホスト名でも指定できるハズだけど、なぜかできなかった。
        PeerAddr  Remote host address     <hostname>[:<port>]
        PeerHost  Synonym for PeerAddr
        PeerPort  Remote port or service    <service>[(<no>)] | <no>
何でだろう?
モジュールのソースまでたどる時間はなし。

ホスト名からIPアドレスを取り出す手順:
my $addr = join(".",unpack C4=>(gethostbyname $name)[4]);
Perl 標準関数だけなので、追加モジュール不要で使える。
PeerAddr に IP アドレスを指定すると、繋がるようになった。

ちなみに、ワンライナーで書いてみると、↓になる。
perl -e 'print join(".",unpack C4=>(gethostbyname shift)[4]), "\n"' www.yahoo.co.jp
引数にホスト名を指定する。

ブログ気持玉

クリックして気持ちを伝えよう!

ログインしてクリックすれば、自分のブログへのリンクが付きます。

→ログインへ

なるほど(納得、参考になった、ヘー)
驚いた
面白い
ナイス
ガッツ(がんばれ!)
かわいい

気持玉数 : 0

この記事へのコメント

BLUEPIXY
2008年09月22日 20:39
試してみましたけどできましたよ。
perl v5.10.0
BLUEPIXY
2008年09月25日 02:57
モジュールのバージョンは
$VERSION = "1.31";
泥山田
2008年11月14日 23:10
my $addr = join(".",unpack C4=>(gethostbyname $name)[4];
のところ、最後の)が抜けてまっせ。
2008年11月16日 01:54
> BLUEPIXYさん
何ででしょうね、手元の Debian の DNS 設定が調子悪かったのかも?

> 泥山田さん
ご指摘ありがとうございますッ。修正しました。

この記事へのトラックバック