12,982
回編集
編集の要約なし |
|||
67行目: | 67行目: | ||
dotnet restore | dotnet restore | ||
<br> | <br> | ||
==== | ==== 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; | 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; | 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> |