没有NS信息的远程域的MX记录

时间:2012-08-16 06:34:42

标签: c# .net dns mx-record

我正在使用c#4.0构建SMTP诊断工具 如果我知道域的主NS的IP地址,我可以获得MX,A和CNAME记录。 所以我可以验证任何电子邮件并运行合法的诊断命令。 ,如果我可以连接到邮件服务器。

我的问题是我找不到合适的.NET解决方案来获取给定域的主NS。

我知道有一些托管客户端,但我无法将它们添加为我的解决方案的参考,或者它们的源代码已关闭。

托管代码和.NET在这个问题上的区别是什么,托管代码可以查询域的NS,而.NET不能像here那样查询。 ?

实现这种功能的正确方法是什么?

此致

1 个答案:

答案 0 :(得分: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

您可以通过查询SOA记录找到主DNS服务器。

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();