我制作了一个可以使用 C# 检测、设置和切换 IPv4 设置的 winform 应用程序。当用户想要从 DHCP 自动获取 IP 时,我调用 Automatic_IP()
:
自动 IP:
private void Automatic_IP()
{
ManagementClass mctemp = new ManagementClass("Win32_NetworkAdapterConfiguration");
ManagementObjectCollection moctemp = mctemp.GetInstances();
foreach (ManagementObject motemp in moctemp)
{
if (motemp["Caption"].Equals(_wifi)) //_wifi is the target chipset
{
motemp.InvokeMethod("EnableDHCP", null);
break;
}
}
MessageBox.Show("IP successfully set automatically.","Done!",MessageBoxButtons.OK,MessageBoxIcon.Information);
Getip(); //Gets the current IP address, subnet, DNS etc
Update_current_data(); //Updates the current IP address, subnets etc into a labels
}
并且在 Getip
方法中,我提取了当前的 IP 地址、子网、网关和 DNS,而不管所有这些都可以手动设置或由 DHCP 自动分配并更新这些值使用 Update_current_data()
方法的标签。
获取提示:
public bool Getip()
{
ManagementClass mc = new ManagementClass("Win32_NetworkAdapterConfiguration");
ManagementObjectCollection moc = mc.GetInstances();
foreach (ManagementObject mo in moc)
{
if(!chipset_selector.Items.Contains(mo["Caption"]))
chipset_selector.Items.Add(mo["Caption"]);
if (mo["Caption"].Equals(_wifi))
{
ipadd = ((string[])mo["IPAddress"])[0];
subnet = ((string[])mo["IPSubnet"])[0];
gateway = ((string[])mo["DefaultIPGateway"])[0];
dns = ((string[])mo["DNSServerSearchOrder"])[0];
break;
}
}
}
但问题是我无法检测当前 IP 是手动设置还是自动分配,尽管我可以从 Automatic_IP
方法中选择 select automatically from DHCP。 ManagementObject.InvokeMethod("EnableDHCP", null);
可以轻松将其设置为自动获取 IP 地址 但我无法检查 IP 是自动设置还是手动设置应用程序首先启动。
我做了一些挖掘,发现类似的帖子,如 this .尽管存在非常相似的帖子 here但这是关于 DNS 而不是 IP 设置。
基本上我想找到选择了哪个选项:
最佳答案
ManagementObject
类有一堆 properties您可以使用,对于网络适配器,其中之一称为 DHCPEnabled
。这会告诉您网络接口(interface)是否正在自动获取 IP 地址。例如:
var isDHCPEnabled = (bool)motemp.Properties["DHCPEnabled"].Value;
关于c# - 检测是否在 Windows 设置中选择了 "Obtain IP address automatically",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50453778/