使用.NET中的特定DNS服务器查询DNS

使用.NET中的特定DNS服务器查询DNS,.net,dns,.net,Dns,从.NET应用程序中,我需要查询特定DNS服务器以解析域名(DNS服务器未在Windows网络配置中定义) 我知道使用标准的.NET Framework类()是不可能做到这一点的。我的问题是我的选择是什么。CodePlex()上有一个开源库可以做到这一点,但它已经很久没有更新了,而且我的应用程序是任务关键型的,所以可靠性非常重要 有什么建议吗?我认为最好的选择是研究DNS协议(这很简单),并使用.net udp套接字自己实现它 DNS确实是一个易于理解和实现的协议 此外,您可以使用DnDNS中的

从.NET应用程序中,我需要查询特定DNS服务器以解析域名(DNS服务器未在Windows网络配置中定义)

我知道使用标准的.NET Framework类()是不可能做到这一点的。我的问题是我的选择是什么。CodePlex()上有一个开源库可以做到这一点,但它已经很久没有更新了,而且我的应用程序是任务关键型的,所以可靠性非常重要


有什么建议吗?

我认为最好的选择是研究DNS协议(这很简单),并使用.net udp套接字自己实现它

DNS确实是一个易于理解和实现的协议


此外,您可以使用DnDNS中的sourcode查看程序/协议中的捕获

您还可以查看并检查它是否适合您的应用程序

下面是一些示例代码,可以帮助您开始:

        var query = new DnsQuery();

        query.Servers.Add("ns1.domainname.com");
        query.Servers.Add("ns2.domainname.com");
        query.Servers.Add("ns3.domainname.com");

        query.Domain = "domain.com";

        query.QueryType = Types.TXT;

        if (query.Send())
        {
            Console.WriteLine("TXT:");
            var response = query.Response;
            foreach (ResourceRecord answer in response.Answers)
            {
                Console.WriteLine(answer.RText);
            }
        }

        query.QueryType = OpenDNS.Types.MX;

        if (query.Send())
        {
            Console.WriteLine("MX:");
            var response = query.Response;
            foreach (MX answer in response.Answers)
            {
                Console.WriteLine("{0} {1}", answer.Preference, answer.Exchange);
            }
        }
您可以使用“JH软件的.NET DNS客户端”来执行此操作。
请参见位于

的第二个代码示例。我有相同的任务,我的解决方案是使用process在操作系统中执行命令并获得输出(它适用于Windows)/VB.NET/是:

Sub Main()
    Dim oProcess As New Process
    Dim oStartInfo As New ProcessStartInfo("nslookup", " [name] [dns server's ip]")
    oStartInfo.UseShellExecute = False
    oStartInfo.RedirectStandardOutput = True
    oProcess.StartInfo = oStartInfo
    oProcess.Start()

    Dim sOutput As String
    Using oStreamReader As System.IO.StreamReader = oProcess.StandardOutput
        sOutput = oStreamReader.ReadToEnd()
    End Using
    Console.WriteLine(sOutput)
End Sub
是一个活跃的项目,是JAVA中DNS的开源实现,在功能集方面非常丰富。我能够使用dnsjava using首先将jar编译为DLL:

c:\Temp>ikvmc-目标:库dnsjava-2.1.5.jar

IKVM.NET编译器版本7.2.4630.5版权所有(C)2002-2012 Jeroen 弗里特斯

注IKVMC002:输出文件为“dnsjava-2.1.5.dll”

请注意,您必须参考IKVM.OpenJDK.Core以及上面的DLL才能使下面的代码正常工作。下面的示例针对特定名称服务器查询A记录:

var lookup = new Lookup("google.com", org.xbill.DNS.Type.A, DClass.IN);
lookup.setResolver(new SimpleResolver("192.168.1.1"));
lookup.run();
lookup.getAnswers().ToList().ForEach(x => Console.WriteLine(x.rdataToString()));
输出


虽然这是一个很老的问题。由于.NET Framework仍然不支持此功能,因此仍有新的库正在开发中;)

看一看。它易于使用,高性能和高可靠性


它也可以在.NET核心跨平台上运行

公平地说,DNS协议也没有太大变化。
74.125.236.164
74.125.236.165
74.125.236.162
74.125.236.174
74.125.236.160
74.125.236.168
74.125.236.169
74.125.236.161
74.125.236.166
74.125.236.167
74.125.236.163