NetBIOS 名の名前解決では、DNS を用いることも可能なことが知られています。
Windows 9x 系 OS では
CCS\Services\VxD\VNETSUP REG_SZ" EnableDNS : "1" 意味: "1" の場合、NetBIOS名の名前解決にDNSも利用する
により、この機能が制御されます。
ただし、Windows 9x 系 OS の場合、この機能の利用にあたって幾つか注意すべき点があります。以下それらについて記述します。
以下に Windows 9x 系 OS が NetBIOS 名の名前解決時に DNS に対して問い合 わせ際のパケットキャプチャを示します。
図1: Windows 98 が NetBIOS 名の名前解決時に DNS 問い合わせる様子
ここで注意すべき点として、図1で赤字で表示したように、DNSクエリのソースポートが通常使われない 137/udp であるという点があげられます。 このため、図2のようなコードにより、問い合わせ元のポートをハイポートに限定している djbdns の場合、この名前解決が行えないという事象が報告されています。
u_new(): if (x->port < 1024) if (x->port != 53) return; t_new(): if (x->port < 1024) if (x->port != 53) { close(x->tcp); return; }
図2: dnscache.cの該当部分
更に注意すべき点として、実際に問い合わせている名前が「W2KPRO2.」のようなFQDNとなっている点が挙げられます。
このため、上記の環境では、該当マシン上で「ping w2kpro2」などを行い、ホスト名の名前解決を行った場合は、DNSサフィックスが補完されることにより、「W2KPRO2.HOME.MONYO.COM」というFQDNの名前解決が可能である環境にも関わらず、NetBIOS 名の名前解決には失敗しています。
なお、Windows NT 系 OS の場合は、図3のように NetBIOS 名の名前を DNS で解決する場合のクエリについても、ソースポートはハイポートであり、DNSサフィックスによる補完も行われますので、上記のような事象は発生しません。
図3: Windows XP が NetBIOS 名の名前解決時に DNS 問い合わせる様子
もともと NetBIOS 名の名前解決に DNS の利用を行うのは、名前解決のトラブルシューティングを複雑にするため、個人的には推奨しておりません。更に上記のような実装になっていることを考慮すると、すくなくとも Windows 9x 系 OS の場合、NetBIOS 名を DNS で解決する機能は事実上使い物にならないと判断すべきではないかと思います。