c++ - 需要一种在 C++ 中设置所有接口(interface)上的 DNS 服务器的方法

标签 c++ networking dns

我正在用 C++ 为 Win XP/7 编写一个小托盘应用程序,目标是只要该应用程序正在运行,http://*.dev 就会指向 http://localhost。 .

这是 XAMPP/WAMP 模块的一部分,允许本地主机上的目录命名虚拟域(例如,http://test.dev/index.php 将映射到 G:\xampp\virtual\test\index.php)

其中一部分是在所有适配器上将 posadis 作为 DNS shim 运行。我有托盘图标工作,以及它的基本功能(启动时启动 posadis,退出时终止,监视 posadis 进程并在它死亡时关闭,给出一个粗略的“关于”屏幕),但我仍然必须手动设置并在我的网络适配器上取消设置 DNS 服务器。

“手动”是指以下dos命令 netsh interface ip set dnsservers name="{adapter name}"source=static address=127.0.0.1 primary ... netsh 接口(interface) ip set dnsservers name="{adapter name}"source=dhcp

当然,这很糟糕;可以这么说,如果您无法在门框内安装 DNS 垫片,那么运行 DNS 垫片有什么用?

我正在研究的解决方案: 1) 我可以让托盘应用程序在 cscript 中运行一个命令,该命令将从“netsh interface ip show interfaces”获取适配器列表,然后在列表上运行注册命令。这看起来很不雅观。

2) 找出我应该在 C++ 中寻找的地方;具体来说,我需要一种方法来枚举系统的适配器,在程序启动时记录它们的配置,将它们的 DNS 指向 127.0.0.1,然后在程序结束时恢复它们的配置。

正确方向的箭头会有所帮助。一个示例片段,moreso。提前致谢!

最佳答案

您可以使用 WMI在每个接口(interface)上配置 DNS。您可以使用 EnableDNS 来执行此操作或 SetDNSServerSearchOrder Win32_NetworkAdapterConfiguration 的方法类(class)。您可以使用 DNSServerSearchOrder 属性获取当前设置。以下是一些资源。

http://www.activexperts.com/activmonitor/windowsmanagement/scripts/networking/client/configuring/#EDNSANAdapters.htm

http://msdn.microsoft.com/en-us/library/aa394558(v=VS.85).aspx

http://technet.microsoft.com/en-us/library/ee692588.aspx

注意:

如果您决定采用这种方法,请注意 Windows XP 的一个已知问题。它在 KB 中描述。文章。

关于c++ - 需要一种在 C++ 中设置所有接口(interface)上的 DNS 服务器的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3955919/

相关文章:

c# - 如何确定 c# 中的 dns 更改?

redirect - 子域重定向到子目录

c++ - 如何访问单独类中的私有(private)构造函数?

c++ - throw() 函数是否应该始终在异常时展开堆栈并允许捕获异常,或者必须调用 std::terminate?

c++ - 如何在 C++ 中读取字符串中以空格分隔的多个 double ?

c++ - qmake:检测目标位宽(32 位或 64 位)

Android 模拟器未连接到互联网

C# - 可以发送 5 个多播 UDP 数据包导致 3 个或更多丢失

objective-c - 如何在 MAC 中获取连接的以太网或 WiFi 的 IP 地址

ruby-on-rails - ruby on rails 邮件程序和非 unicode 域 (.рф)