在.NET应用程序中,我需要查询特定的DNS服务器以解析域名(DNS服务器未在Windows网络配置中定义)。
我知道使用标准.NET Framework类(See this other question)是不可能的。我的问题是我的选择。 CodePlex上有一个开源库(DnDns)可以做到这一点,但它在很长一段时间内没有更新,我的应用程序是关键任务,所以可靠性非常重要。
有什么建议吗?
答案 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 弗里吉特斯
注意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