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

Ism*_*maz 0 c# dns

我对给定DomainName的NameServer有一个很大的问题.实际上我想要做的是一个简单的交易,但在互联网上搜索了很多代码片段,还有nuget包管理器上的库,我找不到解决方案.

我有域名,如"www.example.com",我想通过使用C#代码获取其域服务器.

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

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

Jcl*_*Jcl 7

理论上使用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);
}
Run Code Online (Sandbox Code Playgroud)

请注意,这将返回名称服务器主机,但应使用Dns.GetHostAddresses(或相同的ARSoft.Tools.Net库)将这些主机轻松转换为IP

这是完全未经测试的,但如果我理解正确的问题,应该是你正在照顾的.

更新

我实际上做了一个测试程序并且运行得很好.完整代码:

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);
        }
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

结果:

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
Run Code Online (Sandbox Code Playgroud)

放弃

绝对没有任何方式与我使用的库相关联.刚刚发现这是最简单的工具,因为你提到使用第三方库是好的.