代码之家  ›  专栏  ›  技术社区  ›  Fordi

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

  •  1
  • Fordi  · 技术社区  · 14 年前

    我在C++中为Win XP/7编写了一个小的托盘应用程序,目的是只要应用程序正在运行,http://*.dv将指向 http://localhost .

    这是用于xampp/wamp的mod的一部分,用于允许本地主机上名为virtual domains的目录(例如, http://test.dev/index.php 将映射到g:\xampp\virtual\test\index.php)

    其中一部分是在所有适配器上运行posadis作为DNS填充程序。我有托盘图标工作,以及它的基本功能(启动时启动posadis,退出时终止,监视posadis进程,如果它死了就关闭,粗略地显示“关于”屏幕),但我仍然需要在我的网络适配器上手动设置和取消设置DNS服务器。

    “手动”是指以下DOS命令 netsh interface ip set dnsservers name=“适配器名称”source=静态地址=127.0.0.1主 … netsh interface ip set dnsservers name=“适配器名称”source=dhcp

    当然,这是不好的;如果你不能把它放在门柱里,那么运行一个DNS填充程序有什么好处呢?

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

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

    朝着正确的方向箭头是有帮助的。一个示例片段,moreso。事先谢谢!

    1 回复  |  直到 14 年前
        1
  •  2
  •   Garett    14 年前

    你可以使用 WMI 在每个接口上配置DNS。您可以使用 EnableDNS SetDNSServerSearchOrder 方法 Win32_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 文章。