我正在使用C ++为Win XP / 7编写一个小托盘应用程序,目标是只要应用程序正在运行,http://*.dev就会指向http://localhost。
这是XAMPP / WAMP的mod的一部分,允许在localhost上使用目录命名的虚拟域(例如,http://test.dev/index.php将映射到G:\ xampp \ virtual \ test \ index.php)< / p>
部分原因是将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垫片有什么用?可以这么说?
我正在研究的解决方案: 1)我可以让托盘应用程序在cscript中运行一个命令,从“netsh interface ip show interfaces”获取适配器列表,然后在列表上运行注册命令。这似乎不够优雅。
2)找出我应该在C ++中寻找的地方;具体来说,我需要一种方法来枚举系统的适配器,在程序启动时记录它们的配置,将它们的DNS指向127.0.0.1,然后在程序结束时恢复它们的配置。
正确方向的箭头会有所帮助。一个示例片段,更多。提前谢谢!
答案 0 :(得分:2)
您可以使用WMI在每个界面上配置DNS。您可以使用EnableDNS类的SetDNSServerSearchOrder或Win32_NetworkAdapterConfiguration方法执行此操作。您可以使用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文章中进行了描述。