2009-10-14 10 views
7

Desde una aplicación .NET, necesito consultar un servidor DNS específico para resolver un nombre de dominio (el servidor DNS no está definido en la configuración de red de Windows).Consultar DNS usando servidores DNS específicos en .NET

Sé que esto no es posible utilizando las clases .NET Framework estándar (See this other question). Mi pregunta es cuáles son mis opciones. Hay una biblioteca de código abierto en CodePlex (DnDns) que hace eso, pero no se ha actualizado en mucho tiempo, y mi aplicación es de misión crítica por lo que la fiabilidad es extremadamente importante.

¿Alguna sugerencia?

+4

Para ser justos, tampoco es que el protocolo DNS haya cambiado mucho. –

Respuesta

1

Creo que la mejor opción es estudiar el protocolo DNS (que es bastante fácil) e implementarlo usted mismo utilizando sockets udp .net.

DNS es realmente un protocolo fácil de entender e implementar.

Por otra parte, se puede utilizar el sourcode de DnDNS para ver las capturas en el programa/protocolo

1

También puede echar un vistazo a opendns.net y comprobar si se ajusta a su aplicación

1

que tenía la misma tarea y mi solución para ejecutar un comando en el sistema operativo con el proceso y obtener la salida (funciona para Windows) /VB.NET/ es:

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 es un proyecto activo que es una implementación de código abierto de DNS en JAVA y es bastante rico en términos de conjunto de características. Pude utilizar dnsjava usando ikvmc para compilar primero el frasco a un archivo DLL:

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

IKVM.NET Compiler versión 7.2 .4630.5 copyright (C) 2002-2012 Jeroen Frijters

http://www.ikvm.net/

nota IKVMC0002: archivo de salida es "dnsjava-2.1.5.dll"

Tenga en cuenta que deberá hacer referencia a IKVM.OpenJDK.Core, así como a la DLL anterior para que funcione el siguiente código. El ejemplo siguiente consulta para un registro A en contra de un servidor de nombres específicos:

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

salida

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

Aunque esta es una pregunta bastante viejo. Todavía se están desarrollando nuevas bibliotecas para hacer esto, ya que .NET Framework aún no tiene soporte para esto;)

Eche un vistazo a http://dnsclient.michaco.net. ¡Es fácil de usar, de alto rendimiento y open source!

Y funciona en.NET Core multiplataforma, también!

Cuestiones relacionadas