Frameworkでは、「ホスト名からIPアドレス、IPアドレスからホスト名を取得する」で説明しているように、Dns.GetHostEntryメソッドを使用することで、DNSに問い合わせをして、逆引き(IPアドレスからドメイン名を取得)と正引き(ドメイン名からIPアドレスを取得)を行うことができます。NSやMXなどのレコードを検索したり、DNSサーバーを指定して検索することはできません。このようなDNSクライアントの機能が必要であれば、サードパーティー製のライブラリを使用するのが手っ取り早いでしょう。*1例えば、フリーで公開されているライブラリには、以下のようなものがあります。Libraryしかしここでは、あえてSocket(サンプルでは、UdpClientクラス)を使用して、直接DNSサーバーとやり取りすることに挑戦します。本来なら、RFC*2に書かれているDNSの決まり事をここで説明すべきなのだと思いますが、私にはそれだけの能力も余裕もありませんので、申し訳ありませんが、サンプルコードのみを示し、説明はコード内のコメントに記述しておきます。このサンプルはコンソールアプリケーションで、指定されたDNSサーバーを使用して、Aレコードを検索し、ホスト名「microsoft.com」からIPアドレスを取得(正引き)しています。このサンプルは、Aレコードの他、NS、CNAME、PTR、MXにも対応しています。検索するレコードを変更する場合は、MainメソッドのqTypeの値を変更してください。その場合、domainOrAddressの文字列も適当に(例えば、PTRならばIPアドレスに)変更してください。DNS」を使用するようにしていますが、適当なDNSサーバーに変更してください。*3このサンプルを作成するにあたり、以下の記事を参考にさせていただきました。上記サンプルについて、少し補足の説明をします。CreateRequestMessageメソッドで、DNSサーバーに送信するデータを作成しています。ここでは、ホスト名とレコード種別をバイト配列に変換する以外は、すべて定数を使っています。