0

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

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

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

对于这个问题,托管代码和 .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

您可以通过查询 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();
于 2012-08-16T07:48:32.230 回答