2009-10-14 1 views
7

Von einer .NET-Anwendung muss ich einen bestimmten DNS-Server für die Auflösung eines Domänennamens abfragen (der DNS-Server ist nicht in der Windows-Netzwerkkonfiguration definiert).Abfrage DNS mit bestimmten DNS-Servern in .NET

Ich weiß, dass dies nicht mit Standard-.NET Framework-Klassen (See this other question) möglich ist. Meine Frage ist, was meine Möglichkeiten sind. Es gibt eine Open-Source-Bibliothek auf CodePlex (DnDns), die das tut, aber es wurde seit langer Zeit nicht mehr aktualisiert, und meine Anwendung ist geschäftskritisch, so dass Zuverlässigkeit extrem wichtig ist.

Irgendwelche Vorschläge?

+4

Um fair zu sein, hat es nicht wie das DNS-Protokoll auch viel verändert. –

Antwort

1

Ich denke, die beste Option ist, das DNS-Protokoll zu studieren (das ist ziemlich einfach) und implementieren Sie es selbst mit. NET UDP-Sockets.

DNS ist wirklich ein einfaches Protokoll zu verstehen und zu implementieren.

Darüber hinaus können Sie die sourcode von DnDNS verwenden, um die Fänge im Programm/Protokoll

1

Sie auch einen Blick auf opendns.net nehmen kann, um zu sehen und überprüfen, ob es zu Ihrer Anwendung paßt

1

ich die gleichen Aufgabe hatte, und meine Lösung einen Befehl in OS mit Prozess auszuführen und die Ausgabe (es funktioniert für Windows) erhält /VB.NET/ ist:

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 
0

DNSJava ist ein aktives Projekt, das eine Open-Source-Implementierung von DNS in JAVA ist und ziemlich reich in Bezug auf Feature-Set ist. Ich konnte dnsjava mit ikvmc verwenden, um zuerst das Glas auf eine DLL zu kompilieren:

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

IKVM.NET Compiler Version 7.2 .4630.5 Copyright (C) 2002-2012 Jeroen Frijters

http://www.ikvm.net/

Anmerkung IKVMC0002: Ausgabedatei ist "dnsjava-2.1.5.dll"

Bitte beachten Sie, dass Sie sowohl auf IKVM.OpenJDK.Core als auch auf die obige DLL verweisen müssen, damit der folgende Code funktioniert. Das folgende Beispiel-Abfragen für einen A-Datensatz gegen einen bestimmten Nameserver:

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

Ausgabe

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 
1

Obwohl dies eine ziemlich alte Frage. Es gibt noch neue Bibliotheken, die dafür entwickelt werden, da das .NET Framework dafür noch keine Unterstützung bietet;)

Schauen Sie sich http://dnsclient.michaco.net an. Es ist einfach zu bedienen, hoch performant und open source!

Und es funktioniert.NET Core Cross-Plattform auch!