我正在尝试用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);
}
}
}
}
}
这是我从使用c#在windows中更改DNS中找到的c#代码,效果很好。我正试图在c++中做同样的事情。
如果有人能提供c++代码来完成这个,那将是非常感激的。
最后我做了更多的研究,发现了一些对我有用的东西。我试图通过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();