c# - ¿Puedo anular temporalmente la resolución de DNS dentro de una aplicación.NET?
nunit hosts-file (1)
Tengo un código contenedor que ejecuta un conjunto de pruebas NUnit que escanean sitios web en vivo para ciertos códigos de respuesta.
Me gustaría ejecutar estas pruebas contra un servidor diferente. Cuando se ejecuta manualmente, puedo hacerlo editando el archivo / etc / hosts en Windows / System32 / drivers y estableciendo temporalmente www.mysite.com en 10.0.0.whatever
¿Hay alguna forma en que pueda hacer lo mismo dentro de una aplicación de consola .NET - anular temporalmente un registro DNS o interceptar de algún modo la resolución y devolver una dirección IP diferente?
EDITAR: Esto es para probar varios servidores en una granja de servidores web. Tengo tres servidores en vivo, los cuales PIENSO que son www.example.com. Como los servidores usan encabezados de host HTTP, no puedo simplemente ejecutar una prueba contra server1, luego server2, then server3, porque una solicitud HTTP a http: // server1 / NO devolverá lo mismo que una solicitud a http: // www.example.com/ que está resuelto a server1 ...
En el pasado, con C ++ pude conectarme a la función gethostbyname de WSOCK32.DLL y redirigir las solicitudes de DNS. Usé la biblioteca Microsoft Detours para hacer eso.
En cuanto a C #, encontré esto: http://easyhook.codeplex.com/ tal vez te ayude. Básicamente puede enganchar a la gethostbyname
ventanas gethostbyname
y ejecutar su propio código o devolver un resultado diferente (IP diferente).
La otra solución posible es editar de forma temporal (y programática) el archivo de hosts cuando la aplicación se inicia y finaliza. De tu propio código
EDITAR: Encontré mi antiguo código C ++, tal vez le dará una pista de qué hacer.
struct hostent FAR * WSAAPI MyGetHostByName(IN const char FAR * name)
{
// Call the regular function
struct hostent* ret = GetHostByNameFunction(name);
// Check if it''s the hostname you want to reroute
if ( strcmp(host, (char*)name) == 0 )
{
// Edit the IP returned by the regular gethostbyname
ret->h_addr_list[0] = hostIP;
ret->h_length = 15;
}
// Return the result
return ret;
}
EDIT2: encontró otro enlace con la versión más reciente de easyhooks