18

特定の応答コードについてライブ Web サイトをスキャンする一連の NUnit テストを実行するラッパー コードがあります。

これらのテストを別のサーバーに対して実行したいと思います。手動で実行する場合、Windows\System32\drivers の /etc/hosts ファイルを編集し、www.mysite.com を一時的に 10.0.0.whatever に設定することでこれを実行できます。

.NET コンソール アプリケーション内で同じことを行う方法はありますか? DNS レコードを一時的にオーバーライドするか、何らかの方法で解決を傍受して別の IP アドレスを返しますか?

編集: これは、Web ファーム内の複数のサーバーをテストするためのものです。私は 3 つのライブ サーバーを持っていますが、それらはすべて www.example.com であると考えています。サーバーは HTTP ホスト ヘッダーを使用するため、 http://server1/への HTTP 要求は http://への要求と同じものを返さないため、server1、server2、server3 の順にテストを実行することはできませ ん。 server1 に解決されるwww.example.com/ ...

4

1 に答える 1

7

過去に C++ を使用して、WSOCK32.DLL の gethostbyname 関数にフックし、DNS 要求を再ルーティングすることができました。そのために Microsoft Detours ライブラリを使用しました。

C# に関しては、これを見つけました: http://easyhook.codeplex.com/多分それはあなたを助けるでしょう。基本的に、windows 関数にフックしgethostbynameて独自のコードを実行するか、別の結果 (別の IP) を返すことができます。

もう 1 つの考えられる解決策は、アプリケーションの開始時と終了時にホスト ファイルを一時的に (そしてプログラムによって) 編集することです。独自のコードから。

編集: 古い C++ コードを見つけました。何をすべきかのヒントになるかもしれません。

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: easyhooks の新しいリリースで別のリンクを見つけました

于 2011-05-13T13:47:22.270 に答える