如何使用C#获取给定域名的"NS"条记录?

How to get the "NS" record(s) of a given domain name by using C#?

我对给定域名的名称服务器有一个大问题。实际上我想做的是一个简单的事务但是在互联网上搜索了很多代码片段以及 nuget 包管理器上的库之后我找不到解决方案。

我有像 "www.example.com" 这样的域名,我想使用 C# 代码获取它的域服务器。

nuget 上有一些库,但它们都使用 'whois' 搜索机制,但我不能全部信任它们。因为他们 return 返回字符串就像网页上的任何 whois 搜索结果一样,并且每个字符串结果都可能是不同的,因为在幕后使用不同的 whois 搜索网站。

一些网络专家说我应该通过使用 C# 在 powershell 上使用类似 "nslookup" 的命令来检索可信赖的结果。

使用ARSoft.Tools.Net,理论上(我没有真正尝试过),你应该可以请求一个域的NS记录。

类似于:

var resp = DnsClient.Default.Resolve("mydomain.com", RecordType.Ns);
var nsrecords = resp.AnswerRecords.OfType<NsRecord>();
foreach (var record in nsrecords) {
    Console.WriteLine(record.NameServer);
}

请注意,这将 return 名称服务器 hosts,但这些应该可以通过使用 Dns.GetHostAddresses(或相同的 ARSoft.Tools.Net图书馆)

这完全未经测试,但如果我对问题的理解正确,应该就是你正在寻找的东西。

更新

我实际上做了一个测试程序并且工作得很好。完整代码:

using System;
using System.Linq;
using System.Net;
using ARSoft.Tools.Net.Dns;

namespace SOTestDNS
{
  class Program
  {
    static void Main(string[] args)
    {
      var resp = DnsClient.Default.Resolve("google.com", RecordType.Ns);
      var nsrecords = resp.AnswerRecords.OfType<NsRecord>();
      foreach (var record in nsrecords)
      {
        Console.Write(record.NameServer);
        foreach (var address in Dns.GetHostAddresses(record.NameServer))
        {
          Console.WriteLine(" -> " + address);
        }
      }
    }
  }
}

结果:

ns1.google.com -> 216.239.32.10
ns3.google.com -> 216.239.36.10
ns4.google.com -> 216.239.38.10
ns2.google.com -> 216.239.34.10

免责声明

完全不隶属于我使用的图书馆。刚刚发现它是完成这项工作最简单的工具,因为你提到使用第三方库是可以的。