2009-10-14 13 views
7

Da un'applicazione .NET, ho bisogno di interrogare un server DNS specifico per la risoluzione di un nome di dominio (il server DNS non è definito nella configurazione di rete di Windows).Query DNS utilizzando server DNS specifici in .NET

So che questo non è possibile utilizzando le classi standard di .NET Framework (See this other question). La mia domanda è quali sono le mie opzioni. C'è una libreria open source su CodePlex (DnDns) che lo fa, ma non è stata aggiornata da molto tempo, e la mia applicazione è mission-critical quindi l'affidabilità è estremamente importante.

Qualche suggerimento?

+4

Per essere onesti, non è come il protocollo DNS ha cambiato molto sia. –

risposta

1

Penso che l'opzione migliore sia studiare il protocollo DNS (che è abbastanza semplice) e implementarlo da soli usando i socket .net udp.

DNS è davvero un protocollo facile da capire e da implementare.

Inoltre, è possibile utilizzare il sourcode da DnDNS per vedere le catture nel programma/protocollo

1

Si potrebbe anche dare un'occhiata a opendns.net e verificare se si adatta l'applicazione

1

Ho avuto lo stesso compito e la mia soluzione per eseguire un comando in OS con le procedure e ottenere l'output (funziona per 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 
0

DNSJava è un progetto attivo che è un'implementazione open source di DNS in JAVA ed è piuttosto ricco in termini di set di funzionalità. Sono stato in grado di utilizzare dnsjava utilizzando ikvmc per compilare prima il vaso a una DLL:

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

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

http://www.ikvm.net/

nota IKVMC0002: file di output è "dnsjava-2.1.5.dll"

Si prega di notare che sarà necessario fare riferimento a IKVM.OpenJDK.Core e alla DLL sopra per il codice sottostante per funzionare. L'esempio riportato di seguito query per un record A contro un server di nome specifico:

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

uscita

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

Anche se questa è una domanda piuttosto vecchio. Esistono ancora nuove librerie sviluppate per fare ciò poiché .NET Framework non ha ancora il supporto per questo;)

Dai un'occhiata a http://dnsclient.michaco.net. È facile da usare, ad alte prestazioni e open source!

E funziona.Anche la piattaforma cross NET Core!