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

时间:2009-10-14 08:44:01

标签: .net dns

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

我知道使用标准.NET Framework类(See this other question)是不可能的。我的问题是我的选择。 CodePlex上有一个开源库(DnDns)可以做到这一点,但它在很长一段时间内没有更新,我的应用程序是关键任务,所以可靠性非常重要。

有什么建议吗?

6 个答案:

答案 0 :(得分:3)

您还可以查看opendns.net并查看它是否适合您的应用

以下是一些示例代码,可帮助您入门:

        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);
            }
        }

答案 1 :(得分:2)

虽然这是一个非常古老的问题。仍然有新的库正在开发中,因为.NET Framework仍然不支持这个;)

看看http://dnsclient.michaco.net。它易于使用,性能高,open source

它也适用于.NET Core跨平台!

答案 2 :(得分:1)

我认为最好的选择是研究DNS协议(这非常简单)并使用.net udp套接字自行实现。

DNS实际上是一个易于理解和实施的协议。

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

答案 3 :(得分:1)

您可以使用“JH Software的.NET Client for .NET”执行此操作。 请参阅http://www.simpledns.com/dns-client-lib.aspx

上的第二个代码示例

答案 4 :(得分:1)

我有相同的任务和我的解决方案在OS中执行带有进程的命令并获得输出(适用于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

答案 5 :(得分:0)

DNSJava是一个活跃的项目,是JAVA中DNS的开源实现,在功能集方面非常丰富。我能够使用ikvmc使用dnsjava来首先将jar编译为DLL:

  

c:\ Temp> ikvmc -target:library dnsjava-2.1.5.jar

     

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

     

http://www.ikvm.net/

     

注意IKVMC0002:输出文件是“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()));

输出

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