C Sharpとネットワーク - DNS

提供: MochiuWiki : SUSE, EC, PCB

2021年11月18日 (木) 05:18時点におけるWiki (トーク | 投稿記録)による版 (文字列「<source lang」を「<syntaxhighlight lang」に置換)

概要

DNSレコードの存在を確認するには、DnsClient.NETというライブラリを使用する。
ここでは、調べたい対象のDNSのリストが記述されたファイルを順番に読み込み、存在しない場合は別ファイルに書き込む処理を行う。


サンプルコード

サンプルコードでは、LookupClientのQueryメソッドにて、対象のドメインとレコードの種類(AおよびNS)を指定して、
結果が0件なら存在しないと判断する。

MXレコードを対象としているが、QueryType(Enum)でレコードの種類(AおよびNS)が定義されているので、
様々な種類のレコードを対象に調べることができる。

<syntaxhighlight lang="c#">
using System;
using System.IO;
using DnsClient;  // DnsClientを参照に追加

namespace DNSRecordCheck
{
   class Program
   {
      static async void Main(string[] args)
      {
         // LookupClientクラスのインスタンスを生成
         var lookupClient = new LookupClient();

         using (var sreader = new StreamReader(@"C:\domains.txt"))
         {
            while (!sreader.EndOfStream)
            {
               // 調査対象のリストから1行ずつ読み込み
               var line = await sreader.ReadLineAsync();

               using (var swriter = File.AppendText(@"C:\ignores.txt"))
               {
                  // 読み込んだDNSを問い合わせる(QueryType.MX : MXレコードを対象とする)
                  var result = lookupClient.Query(line, QueryType.MX);

                  if (result.Answers.Count == 0)
                  {  // 結果が0件の場合は存在しないと判断
                     // 別ファイル(ignores.txt)に書き込む
                     swriter.WriteLine(line);
                  }
               }
            }
         }
      }
   }
}
</source>