【问题标题】:Need a way in C++ to set the DNS servers on all interfaces需要在 C++ 中设置所有接口上的 DNS 服务器
【发布时间】:2010-10-18 00:26:49
【问题描述】:

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

这是 XAMPP/WAMP 模块的一部分,允许在 localhost 上以目录命名的虚拟域(例如,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 shim 放入门框,那么运行它有什么好处?

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

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

正确方向的箭头会很有帮助。还有一个例子 sn-p。提前致谢!

【问题讨论】:

    标签: c++ networking dns


    【解决方案1】:

    您可以使用WMI 在每个接口上配置 DNS。您可以使用Win32_NetworkAdapterConfiguration 类的EnableDNSSetDNSServerSearchOrder 方法来完成此操作。您可以使用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 文章中有所描述。

    【讨论】:

    • 哦,甜!我现在不能玩它,但只要我有空闲时间,我就会试试这个。
    猜你喜欢
    • 2023-03-22
    • 1970-01-01
    • 2019-04-20
    • 2021-05-31
    • 1970-01-01
    • 2017-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多