名前解決

Linux の場合、名前解決は /etc/nsswitch.conf の設定に従う。nsswitch ってのは Name Service Switch のことね。ホスト名だけでなく、ユーザ、グループ、プロトコル*1の名前解決もこのファイルに依存する。ちなみに名前解決には NISLDAP も使える。聞くところによると WINS *2も使えるとか。
で、手軽にこれを調べるコマンドに getent なんてのがある。

getent hosts hostname

とかそんな感じ。でも、Debian lenny でこれやってみると、/etc/hosts(設定ファイル上で files) を優先にしておいても、hosts/DNS 両方でホスト名が見つかると DNS で見つかったほうを表示したりして全然実情にあってないでやんの。意味ねぇ。
とりあえず、思いつき名前解決スクリプト

#!/usr/bin/env python

import sys
import socket

for name in sys.argv[1:]:
    try:
        print '%s: %s' % (name, socket.gethostbyname(name))
    except:
        print '%s: unknown' % name

いやまぁ、ping で十分だけどね。

*1:http => 80/tcp のようなサービス名とポート番号の対応関係

*2:Windows ネットワークの名前解決の仕組み