0

c#4.0を使用してSMTP診断ツールを構築しています。ドメインのプライマリNSのIPアドレスがわかっている場合は、MX、A、およびCNAMEレコードを取得できます。したがって、電子メールを検証して、法的な診断コマンドを実行できます。、メールサーバーに接続できれば。

私の問題は、特定のドメインのプライマリNSを取得するための適切な.NETソリューションが見つからなかったことです。

いくつかの管理対象クライアントがあることは知っていますが、ソリューションへの参照としてそれらを追加できないか、それらのソースコードが閉じられています。

この問題のマネージコードと.NETの違いは何ですか?マネージコードはドメインのNSをクエリできますが、.NETはここに記載されているようにできません。?

そのような種類の機能を実装するための適切な方法は何ですか?

よろしく

4

1 に答える 1

2

IPInterfaceProperties.DnsAddressesを使用して、DNSサーバーのIPを取得できます。コード例はここにあります:http://msdn.microsoft.com/en-us/library/system.net.networkinformation.ipinterfaceproperties.dnsaddresses.aspx

次に、次のコンポーネントを使用してそのサーバーにクエリを実行できます: http: //www.codeproject.com/Articles/12072/C-NET-DNS-query-component

プライマリDNSサーバーは、SOAレコードを照会することで見つけることができます。

List<IPAddress> dnsServers = new List<IPAddress>();

NetworkInterface[] adapters = NetworkInterface.GetAllNetworkInterfaces();

foreach (NetworkInterface adapter in adapters)
{
    IPInterfaceProperties adapterProperties = adapter.GetIPProperties();
    IPAddressCollection adapterDnsServers = adapterProperties.DnsAddresses;

    if (adapterDnsServers.Count > 0)
        dnsServers.AddRange(adapterDnsServers);
}

foreach (IPAddress dnsServer in (from d in dnsServers 
                                where d.AddressFamily == AddressFamily.InterNetwork
                               select d))
{
    Console.WriteLine("Using server {0}", dnsServer);

    // create a request
    Request request = new Request();

    // add the question
    request.AddQuestion(new Question("stackoverflow.com", DnsType.MX, DnsClass.IN));

    // send the query and collect the response
    Response response = Resolver.Lookup(request, dnsServer);

    // iterate through all the answers and display the output
    foreach (Answer answer in response.Answers)
    {
        MXRecord record = (MXRecord)answer.Record;
        Console.WriteLine("{0} ({1}), preference {2}", record.DomainName, Dns.GetHostAddresses(record.DomainName)[0], record.Preference);
    }

    Console.WriteLine();
}

Console.ReadLine();
于 2012-08-16T07:48:32.230 に答える