我有一些包装器代码,可以运行一组NUnit测试,扫描实时网站以获取特定的响应代码。
我想在不同的服务器上运行这些测试。在手动运行时,我可以通过编辑WindowsSystem32\drivers中的/etc/hosts文件并将www.mysite.com临时设置为10.0.0来完成此操作
是否有任何方法可以在.NET控制台应用程序中执行相同的操作-临时覆盖DNS记录,或者以某种方式截获解析并返回不同的IP地址?
编辑:用于测试web场中的多个服务器。我有三个实时服务器,它们都认为它们是www.example.com。因为服务器使用host头,所以我不能先对server1运行测试,然后对server2运行测试,然后对server3运行测试,因为对http://server1/的HTTP请求不会返回与对解析为server1的http://www.example.com/的请求相同的内容...
发布于 2011-05-13 21:47:22
在过去使用C++时,我能够连接到WSOCK32.DLL的gethostbyname函数并重新路由DNS请求。我使用Microsoft Detour库来做这件事。
至于C#,我发现了这个:http://easyhook.codeplex.com/,也许它会对你有所帮助。基本上,您可以挂接到gethostbyname
窗口函数并执行自己的代码或返回不同的结果(不同的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;
}
EDIT2:找到更新版本的easyhooks的另一个链接
https://stackoverflow.com/questions/5992700
复制相似问题