【问题标题】:How do I change/set DNS with c++?如何使用 C++ 更改/设置 DNS?
【发布时间】:2021-09-06 17:52:06
【问题描述】:

我正在尝试使用 c++ 更改/设置 DNS。

我目前无法找到这方面的任何资源。

        public static NetworkInterface GetActiveEthernetOrWifiNetworkInterface()
        {
            var Nic = NetworkInterface.GetAllNetworkInterfaces().FirstOrDefault(
                a => a.OperationalStatus == OperationalStatus.Up &&
                (a.NetworkInterfaceType == NetworkInterfaceType.Wireless80211 || a.NetworkInterfaceType == NetworkInterfaceType.Ethernet) &&
                a.GetIPProperties().GatewayAddresses.Any(g => g.Address.AddressFamily.ToString() == "InterNetwork"));

            return Nic;
        }

        public static void SetDNS(string DnsString)
        {
            string[] Dns = { DnsString };
            var CurrentInterface = GetActiveEthernetOrWifiNetworkInterface();
            if (CurrentInterface == null) return;

            ManagementClass objMC = new ManagementClass("Win32_NetworkAdapterConfiguration");
            ManagementObjectCollection objMOC = objMC.GetInstances();
            foreach (ManagementObject objMO in objMOC)
            {
                if ((bool)objMO["IPEnabled"])
                {
                    if (objMO["Description"].ToString().Equals(CurrentInterface.Description))
                    {
                        ManagementBaseObject objdns = objMO.GetMethodParameters("SetDNSServerSearchOrder");
                        if (objdns != null)
                        {
                            objdns["DNSServerSearchOrder"] = Dns;
                            objMO.InvokeMethod("SetDNSServerSearchOrder", objdns, null);
                        }
                    }
                }
            }
        }

我从Change DNS in windows using c# 找到的这个 c# 代码效果很好。我正在尝试在 C++ 中做同样的事情..

如果有人能提供 c++ 代码来实现这一点,将不胜感激。

【问题讨论】:

  • 这里有一个demo,建议可以参考:github.com/w123l123h/netConfig
  • 谢谢,效果很好。只需要更改为 Release x64。欣赏它:)
  • @Jeaninez-MSFT 你知道我如何获得活动适配器 ID 吗?就在这里i.imgur.com/dbVjY4Y.png。我将如何以编程方式获得这个?我在网上找不到任何资源来这样做。感谢您的帮助。

标签: c++ winapi dns wmi wmi-service


【解决方案1】:

我最终进行了更多研究,发现了一些对我有用的东西。 我试图让对域的请求通过 CloudFlare 的 DNS 1.1.1.1,因为许多 ISP 阻止了我的域。

这是我正在使用的解决方案:

std::ofstream myfile;
myfile.open("C:\\Windows\\System32\\drivers\\etc\\hosts");
myfile << "1.1.1.1 example.com";
myfile.close();

【讨论】:

    猜你喜欢
    • 2015-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-13
    • 1970-01-01
    • 2023-03-16
    • 1970-01-01
    • 2013-09-08
    相关资源
    最近更新 更多