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