いずれもWindowsの話。
ご存知でしたらご教示いただけると幸いです。
その1:DNSサーバのIPアドレスの取得方法は?
ホスト名からIPアドレスを得る場合は、Cならgethostbynameとか、.NETならDns.GetHostEntryなんかを使うわけだ。
こいつらは、DNSサーバに問い合わせを行って、ホスト名をIPアドレスに解決してくれる。
じゃあ、DNSサーバのアドレスはどうやって得る?
ネットワークインターフェイスのプロパティで、DNSサーバのアドレスを設定してある場合は、それが使われる。
ここを自動取得にしている場合は、DHCPサーバから取得できる。
じゃあ、DHCPサーバのアドレスは?
これは、ブロードキャストでネットワーク内の全コンピュータに問い合わせて、返ってきたところの情報を使う。
ネットワーク内にDHCPサーバが複数あると、あちこちから応答が返ってきて混乱するかもしれない。
まぁ、そういうネットワーク構成にはするな、ということなのだろう。
では、DNSサーバのアドレスをプログラムから取得する方法はあるのか?
これが第一の疑問。
まず、Win32 APIでは、GetNetworkParams関数で取得できるらしいということはわかった。
だが、こいつはIPv4のアドレスしか返さない。
今はまだ非現実的だが、IPv6アドレスしか持たないDNSサーバはどうする?
いろいろ検索してみて、IPv6でのDNSサーバ探索方法は、まだ決定的ではないのではないかという感触を得た。
少なくとも、2006年の時点ではまだ審議中らしい。最新情報を知りたいところだ。
いくつか方法は提示されているが、固まっているのは、IPv6に対応したDHCPサーバへの問い合わせしかないんだとか。
今のところ、やる必要性があればこれが確実だろう。
ちなみに、IPv6でのDHCPサーバの探索方法は決まっているらしい。RFC読んでないから知らないが。
もうひとつ、問題となるケースが残っている。
静的に構成されたIPv6 DNSサーバのアドレス取得方法だ。
Vistaでは設定が可能になっている(XP以前はどうだったか忘れた)から、何か方法はあるんだろう。
というわけで、とりあえず、静的に構成されたIPv6アドレスの取得方法さえわかればなんとかなる。
が、できれば、静的か動的か、v4かv6かを問わずに取得できる方法があるとありがたい。
マネージかアンマネージかは問わない。
その2:複数のNICがある場合の挙動
Windowsでは、DNSやDHCPをNICごとに設定できる。
これで、一台のマシンに複数のNICがついていたら、どっちの設定が使われるんだろう?
試して観察してみることもできるけど、まずは仮想マシンにOSを入れるところから始めないといけないので面倒臭い。
以上2点、ご存知でしたらよろしくお願いいたします。
「このRFCを読め」とかでも構いませんので。