Question

J'ai du code wrapper qui exécute un ensemble de tests Nunit qui scannent des sites Web en direct pour certains codes de réponse.

Je voudrais exécuter ces tests contre un autre serveur. Lors de l'exécution manuellement, je peux le faire en modifiant le fichier / etc / hôtes dans Windows System32 Drivers et en définissant temporairement www.mysite.com à 10.0.0.

Existe-t-il un moyen de faire de même dans une application de console .NET - remplacer temporairement un enregistrement DNS ou intercepter en quelque sorte la résolution et renvoyer une adresse IP différente?

Edit: Ceci est pour tester plusieurs serveurs dans une ferme Web. J'ai trois serveurs en direct, qui pensent tous qu'ils sont www.example.com. Parce que les serveurs utilisent des en-têtes hôte HTTP, je ne peux pas simplement exécuter un test contre Server1, puis Server2, puis Server3, car une demande HTTP à http: // server1 / ne retournera pas la même chose qu'une demande http://www.example.com/ c'est résolu à server1 ...

Était-ce utile?

La solution

Dans le passé avec C ++, j'ai pu m'accrocher à la fonction GethostByName de WSOCK32.DLL et à rediffuser les demandes DNS. J'ai utilisé la bibliothèque Microsoft Detours pour ce faire.

Quant à C #, j'ai trouvé ceci: http://easyhook.codeplex.com/ Peut-être que cela vous aidera. Fondamentalement, vous pouvez vous connecter au gethostbyname Fonction Windows et exécutez votre propre code ou renvoyez un résultat différent (IP différent).

L'autre solution possible consiste à modifier temporairement (et par programmation) le fichier hosts lorsque l'application démarre et se termine. De votre propre code.

Edit: J'ai trouvé mon ancien code C ++, peut-être que cela vous donnera un indice quoi faire.

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: a trouvé un autre lien avec la nouvelle version de EasyHooks

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top