首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >我是否可以在.NET应用程序中临时覆盖DNS解析?

我是否可以在.NET应用程序中临时覆盖DNS解析?
EN

Stack Overflow用户
提问于 2011-05-13 21:36:02
回答 1查看 4.9K关注 0票数 17

我有一些包装器代码,可以运行一组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/的请求相同的内容...

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-05-13 21:47:22

在过去使用C++时,我能够连接到WSOCK32.DLL的gethostbyname函数并重新路由DNS请求。我使用Microsoft Detour库来做这件事。

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

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

编辑:我找到了我的旧C++代码,也许它会给你一个提示。

代码语言:javascript
复制
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的另一个链接

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5992700

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档