gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 04:37:17 25 4
gpt4 key购买 nike

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com