【问题标题】:MX records of a remote domain without NS information没有 NS 信息的远程域的 MX 记录
【发布时间】:2012-08-16 06:34:41
【问题描述】:

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

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

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

对于这个问题,托管代码和 .NET 有什么区别,托管代码可以查询域的 NS,而 .NET 不能如here 所述。 ?

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

问候

【问题讨论】:

  • 哪些托管客户不能作为参考添加?
  • 嗯,这是一个很难的问题 :) 我不记得了。在尝试了这么多事情并得到错误之后,我已经删除了它们。

标签: c# .net dns mx-record


【解决方案1】:

您可以使用 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();

【讨论】:

  • 你可以访问本地接口,不能访问远程接口。远程域防火墙永远不会让你访问他们的接口。
  • 您获得了您的接口,因此您获得了您的 DNS 服务器的 IP,因此您可以查询它以获取远程域的 SOA 记录,因此您可以查询该 NS 以获取 MX 记录。 (尽管您也可以在 NS 中查询 MX 记录。)
  • 假设我的本地 IP 是 192.168.1.10,我的默认网关和主 DNS 服务器是 192.168.1.1。我认为我不能在本地 DNS 或路由器上查询 SOA 以获取远程域,但可以在远程 NS 服务器上查询。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-06-08
  • 1970-01-01
  • 2020-10-23
  • 1970-01-01
  • 1970-01-01
  • 2014-11-11
  • 2015-03-11
相关资源
最近更新 更多