我可以在.NET应用程序中临时重写DNS解析吗?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (13)

我有一些包装代码,它运行一组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)。

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

我发现我的旧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;
}

发现另一个链接与更新版本的easyhooks

扫码关注云+社区