「C Sharpとネットワーク - DNS」の版間の差分

ナビゲーションに移動 検索に移動
編集の要約なし
67行目: 67行目:
  dotnet restore
  dotnet restore
<br>
<br>
==== DNSレコードタイプの確認 ====
==== DNSレコードタイプの取得 (PTRレコードおよびSRVレコード以外) ====
以下の例では、duckduckgo.comから複数のDNSレコードタイプを取得および表示している。<br>
以下の例では、duckduckgo.comから複数のDNSレコードタイプを取得および表示している。<br>
<br>
<br>
125行目: 125行目:
                 case NsRecord ns:
                 case NsRecord ns:
                   Console.WriteLine($"NS Record: {ns.NSDName}");
                   Console.WriteLine($"NS Record: {ns.NSDName}");
                  break;
                case PtrRecord ptr:
                  Console.WriteLine($"PTR Record: {ptr.PtrDomainName}");
                   break;
                   break;
                 case SoaRecord soa:
                 case SoaRecord soa:
                   Console.WriteLine($"SOA Record: Primary NS: {soa.MName}, Responsible: {soa.RName}");
                   Console.WriteLine($"SOA Record: Primary NS: {soa.MName}, Responsible: {soa.RName}");
                  break;
                case SrvRecord srv:
                  Console.WriteLine($"SRV Record: Target: {srv.Target}, Port: {srv.Port}, Priority: {srv.Priority}, Weight: {srv.Weight}");
                   break;
                   break;
                 case TxtRecord txt:
                 case TxtRecord txt:
148行目: 142行目:
  </syntaxhighlight>
  </syntaxhighlight>
<br>
<br>
==== PTRレコードおよびSRVレコードの取得 ====
PTRレコードはIPアドレスの逆引き用であり、SRVレコードは特定のサービスに対して使用される。<br>
<br>
以下の例では、指定したIPアドレスのPTRレコードおよび指定したサービスのSRVレコードを取得して表示する。<br>
もし、特定のIPアドレスやサービスに対して実行する場合は、GetPtrRecordメソッドおよびGetSrvRecordメソッドの引数を適宜変更すること。<br>
<br>
* PTRレコードの取得
*: GetPtrRecordメソッドでは、指定されたIPアドレスに対してPTRレコードを取得する。
*: <code>QueryReverseAsync</code>メソッドを使用して、IPアドレスの逆引きを行う。
*: 以下の例では、"8.8.8.8" (Google Public DNS) を使用しているが、任意のIPアドレスに変更可能である。
<br>
* SRVレコードの取得
*: GetSrvRecordメソッドでは、指定されたサービス名に対してSRVレコードを取得する。
*: SRVレコードのクエリ形式は、一般的に、<u>_service._proto.name</u>の形式である。
*: 以下の例では、<u>_sip._tcp.example.com</u>を使用しているが、実際のサービスとドメインに応じて変更する必要がある。
<br>
<u>※注意</u><br>
<u>PTRレコードの取得に使用するIPアドレスは、実際に逆引きが設定されているものを使用すること。</u><br>
<u>SRVレコードの取得に使用するサービス名は、実際に存在するサービスとドメインの組み合わせを使用すること。</u><br>
<br>
<u>エラーハンドリングを行っているが、ネットワーク状況やDNSサーバの設定によっては結果が得られない場合がある。</u><br>
<br>
<syntaxhighlight lang="c#">
using System;
using System.Net;
using System.Threading.Tasks;
using DnsClient;
class Program
{
    public static async Task Main(string[] args)
    {
      var lookup = new LookupClient();
      // PTRレコードの取得
      await GetPtrRecord(lookup, "8.8.8.8");
      // SRVレコードの取得
      await GetSrvRecord(lookup, "_sip._tcp.example.com");
    }
    private static async Task GetPtrRecord(LookupClient lookup, string ipAddress)
    {
      Console.WriteLine($"--- PTR Record for {ipAddress} ---");
      try {
          var ip = IPAddress.Parse(ipAddress);
          var result = await lookup.QueryReverseAsync(ip);
          if (result.Answers.PtrRecords.Count == 0) {
            Console.WriteLine("No PTR records found.");
            return;
          }
          foreach (var ptrRecord in result.Answers.PtrRecords) {
            Console.WriteLine($"PTR Record: {ptrRecord.PtrDomainName}");
          }
      }
      catch (Exception ex) {
          Console.WriteLine($"Error retrieving PTR record: {ex.Message}");
      }
    }
    private static async Task GetSrvRecord(LookupClient lookup, string service)
    {
      Console.WriteLine($"--- SRV Records for {service} ---");
      try {
          var result = await lookup.QueryAsync(service, QueryType.SRV);
          if (result.Answers.SrvRecords.Count == 0) {
            Console.WriteLine("No SRV records found.");
            return;
          }
          foreach (var srvRecord in result.Answers.SrvRecords) {
            Console.WriteLine($"SRV Record: Target: {srvRecord.Target}, " +
                              $"Port: {srvRecord.Port}, " +
                              $"Priority: {srvRecord.Priority}, " +
                              $"Weight: {srvRecord.Weight}");
          }
      }
      catch (Exception ex) {
          Console.WriteLine($"Error retrieving SRV record: {ex.Message}");
      }
    }
}
</syntaxhighlight>
==== DNSサーバの確認 ====
==== DNSサーバの確認 ====
以下の例では、対象のDNSのリストが記述されたファイルを順番に読み込み、存在しない場合は別ファイルに書き込んでいる。<br>
以下の例では、対象のDNSのリストが記述されたファイルを順番に読み込み、存在しない場合は別ファイルに書き込んでいる。<br>

案内メニュー