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

时间:2010-10-18 00:26:49

标签: c++ networking dns

我正在使用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,然后在程序结束时恢复它们的配置。

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

1 个答案:

答案 0 :(得分:2)

您可以使用WMI在每个界面上配置DNS。您可以使用EnableDNS类的SetDNSServerSearchOrderWin32_NetworkAdapterConfiguration方法执行此操作。您可以使用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文章中进行了描述。