【发布时间】: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