我可以暂时覆盖.NET应用程序中的DNS解析吗?

我有一些包装代码,它运行一组NUnit测试,扫描实时网站以获取某些响应代码。

我想针对不同的服务器运行这些测试。 手动运行时,我可以通过编辑Windows \ System32 \ drivers中的/ etc / hosts文件并暂时将www.mysite.com设置为10.0.0来执行此操作。

有什么方法可以在.NET控制台应用程序中做同样的事情 – 暂时覆盖DNS记录或以某种方式拦截分辨率并返回不同的IP地址?

编辑:这用于测试Web场中的多个服务器。 我有三个实时服务器,所有这些都认为它们是www.example.com。 因为服务器使用HTTP主机头,我不能只针对server1,然后是server2,然后是server3运行测试,因为对http:// server1 /的HTTP请求不会返回与http://请求相同的内容。 www.example.com/已经解决了server1 …

在过去使用C ++时,我能够挂钩到WSOCK32.DLL的gethostbyname函数并重新路由DNS请求。 我使用Microsoft Detours库来做到这一点。

至于C#我发现了这个: http : //easyhook.codeplex.com/也许它会对你有所帮助。 基本上你可以挂钩gethostbyname windows函数并执行你自己的代码或返回不同的结果(不同的IP)。

另一种可能的解决方案是在应用程序启动和结束时临时(并以编程方式)编辑hosts文件。 从你自己的代码。

编辑:我发现了我的旧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; } 

编辑2:找到另一个链接与更新的easyhooks