我正在用 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://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/