Domanda

Ho del codice wrapper che esegue una serie di test NUNIT che scansionano siti Web live per determinati codici di risposta.

Vorrei eseguire questi test su un server diverso. Durante l'esecuzione manualmente, posso farlo modificando il file /etc /host in windows system32 driver e impostando temporaneamente www.mysite.com su 10.0.0. qualunque cosa

Esiste un modo in cui posso fare lo stesso all'interno di un'applicazione della console .NET: sovrascrivere temporaneamente un record DNS o intercettare in qualche modo la risoluzione e restituire un indirizzo IP diverso?

EDIT: questo è per testare più server in una fattoria web. Ho tre server dal vivo, tutti pensano che siano www.example.com. Poiché i server utilizzano le intestazioni host HTTP, non posso semplicemente eseguire un test su Server1, quindi Server2, quindi Server3, perché una richiesta HTTP a http: // server1/ non restituirà la stessa cosa di una richiesta http://www.example.com/ Questo è risolto in server1 ...

È stato utile?

Soluzione

In passato con C ++ sono stato in grado di agganciarmi alla funzione GethostByName di Wsock32.Dll e reincarica le richieste DNS. Ho usato la libreria Microsoft Detours per farlo.

Per quanto riguarda C# ho trovato questo: http://easyhook.codeplex.com/ forse ti aiuterà. Fondamentalmente puoi agganciare al gethostbyname Funzionare Windows ed eseguire il proprio codice o restituire un risultato diverso (IP diverso).

L'altra possibile soluzione è quella di modificare temporaneamente (e programmaticamente) il file Host quando l'applicazione si avvia e termina. Dal tuo codice.

EDIT: ho trovato il mio vecchio codice C ++, forse ti darà un suggerimento cosa fare.

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: ha trovato un altro link con la nuova versione di Easyhooks

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top