C# 使用c在windows中更改DNS#
为这混乱道歉,我几天前就开始了,我还在努力学习。 我的代码:C# 使用c在windows中更改DNS#,c#,windows,dns,C#,Windows,Dns,为这混乱道歉,我几天前就开始了,我还在努力学习。 我的代码: private void button1_Click(object sender, EventArgs e) { ManagementScope oMs = new ManagementScope(); ObjectQuery oQuery = new ObjectQuery("Select * From Win32_NetworkAdap
private void button1_Click(object sender, EventArgs e)
{
ManagementScope oMs = new ManagementScope();
ObjectQuery oQuery =
new ObjectQuery("Select * From Win32_NetworkAdapter");
ManagementObjectSearcher oSearcher = new ManagementObjectSearcher(oMs, oQuery);
ManagementObjectCollection oReturnCollection = oSearcher.Get();
foreach (ManagementObject oReturn in oReturnCollection)
{
if (oReturn.Properties["NetConnectionID"].Value != null)
{
// I want the result from this pasted into the "Network Adapter" prompt
Console.WriteLine(oReturn.Properties["NetConnectionID"].Value);
// This is probably 100% wrong, sorry.
String NetworkAdapter = Console.WriteLine(oReturn.Properties["NetConnectionID"].Value);
Process process = new Process();
process.StartInfo.FileName = "cmd.exe";
process.StartInfo.CreateNoWindow = true;
process.StartInfo.RedirectStandardInput = true;
process.StartInfo.RedirectStandardOutput = true;
process.StartInfo.UseShellExecute = false;
process.Start();
// I want to insert the Name of a network adapter into this command prompt, but I can't seem to manage it.
process.StandardInput.WriteLine("netsh interface ipv4 set dns "NetworkAdapter" static 8.8.8.8");
process.StandardInput.WriteLine("netsh interface ipv4 add dns "NetworkAdapter" 8.8.4.4 index=2");
process.StandardInput.Flush();
process.StandardInput.Close();
process.WaitForExit();
Console.WriteLine(process.StandardOutput.ReadToEnd());
Console.Read();
}
}
}
其想法是,当我按下按钮时,它将检测到我的活动网络适配器名称,并通过cmd.exe提示符将其粘贴到标准dns更改中。我开始觉得我让我自己变得更难了
感谢您的帮助。更改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;
}
然后设置DNS:
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["Caption"].ToString().Contains(CurrentInterface.Description))
{
ManagementBaseObject objdns = objMO.GetMethodParameters("SetDNSServerSearchOrder");
if (objdns != null)
{
objdns["DNSServerSearchOrder"] = Dns;
objMO.InvokeMethod("SetDNSServerSearchOrder", objdns, null);
}
}
}
}
}
然后使用如下方法:
SetDNS("127.0.0.1");
要取消dns设置,请使用:
public static void UnsetDNS()
{
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["Caption"].ToString().Contains(CurrentInterface.Description))
{
ManagementBaseObject objdns = objMO.GetMethodParameters("SetDNSServerSearchOrder");
if (objdns != null)
{
objdns["DNSServerSearchOrder"] = null;
objMO.InvokeMethod("SetDNSServerSearchOrder", objdns, null);
}
}
}
}
}
要保存适配器,只需执行以下操作:string adapter=oReturn.Properties[“NetConnectionID”].Value;然后将其添加到您的字符串中cmd@kaj我尝试了字符串NetworkAdapter=oReturn.Properties[“NetConnectionID”].Value;与process.StandardInput.WriteLine(@“netsh接口ipv4设置dns”+网络适配器+“静态8.8.8.8”);process.StandardInput.WriteLine(@“netsh接口ipv4添加dns”+网络适配器+“8.8.4.4索引=2”);但我得到了以下信息:无法隐式地将类型“object”转换为“string”。存在显式转换(是否缺少强制转换?这是获取字符串并将其作为参数传递的方式。但您的问题是什么?我似乎无法使其工作。控制台显示它仅尝试运行“netsh interface ipv4 set dns”所以我想我的问题是我做错了什么?看看下面的答案谢谢!这比命令提示解决问题的方式要好得多!再次感谢!一个快速的后续问题:添加一个辅助DNS,就像google使用8.8.8.8+8.8.4.4-我如何处理这个问题?还放置了UnsetDNS();作为按钮1应该将其设置为DHCP?再次感谢!要设置辅助DNS,可以将数组传递给包含两个ip的方法,如:string[]both={“127.0.0.1”,“127.0.0.2”};或者通过任何标记将其拆分,然后将其转换为如下行的数组:string[]DNS={DnsString};这里将字符串转换为数组,只需将其设置为:string[]Dns=DnsString.Split('*');然后设置两个Dns