Dyl*_*tie 16 c# dns nunit ipconfig hosts-file
我有一些包装代码,它运行一组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/也许它会对你有所帮助.基本上你可以挂钩到gethostbynamewindows函数并执行你自己的代码或返回不同的结果(不同的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;
}
Run Code Online (Sandbox Code Playgroud)
EDIT2:发现另一个链接更新easyhooks
| 归档时间: |
|
| 查看次数: |
3968 次 |
| 最近记录: |