在C#.NET中检查静态或动态IP地址?
我正在构建一个非常基本的表单应用程序
我可以获得本地计算机上可用的IP地址列表。 但是,我还想确定如何获得这些地址(例如DHCP或静态)。 如何判断系统上是否配置了静态IP地址?
目标是通知新手最终用户(可能不了解网络设置或如何获取网络设置)可用的静态IP地址。 并且,如果不存在静态地址,请通知他们需要设置静态地址。
TIA
不幸的是,你可能不得不使用WMI。 可能还有另一种方式,但这是我所知道的唯一方式。
此代码将输出有关系统上每个适配器的所有信息。 我认为该名称是您想要的属性的“DHCPEnabled”。
ManagementObjectSearcher searcherNetwork = new ManagementObjectSearcher("root\\CIMV2", "SELECT * FROM Win32_NetworkAdapterConfiguration"); foreach (ManagementObject queryObj in searcherNetwork.Get()) { foreach (var prop in queryObj.Properties) { Console.WriteLine(string.Format("Name: {0} Value: {1}", prop.Name, prop.Value)); } }
using System.Net.NetworkInformation; NetworkInterface[] niAdpaters = NetworkInterface.GetAllNetworkInterfaces(); private Boolean GetDhcp(Int32 iSelectedAdpater) { if (niAdpaters[iSelectedAdpater].GetIPProperties().GetIPv4Properties() != null) { return niAdpaters[iSelectedAdpater].GetIPProperties().GetIPv4Properties().IsDhcpEnabled; } else { return false; } }
您可以使用WMI来获取网络适配器配置。
例如,请查看http://www.codeproject.com/KB/system/cstcpipwmi.aspx 。 网络适配器上的“DhcpEnabled”属性应该告诉您是否通过dhcp获取地址。
我使用两种方法如下:
public static string GetLocalIPAddress() { var host = Dns.GetHostEntry(Dns.GetHostName()); foreach (var ip in host.AddressList) { if (ip.AddressFamily == AddressFamily.InterNetwork) { return ip.ToString(); } } return "unknown"; } public static string GetLocalIpAllocationMode() { string MethodResult = ""; try { ManagementObjectSearcher searcherNetwork = new ManagementObjectSearcher("root\\CIMV2", "SELECT * FROM Win32_NetworkAdapterConfiguration"); Dictionary Properties = new Dictionary(); foreach (ManagementObject queryObj in searcherNetwork.Get()) { foreach (var prop in queryObj.Properties) { if (prop.Name != null && prop.Value != null && !Properties.ContainsKey(prop.Name)) { Properties.Add(prop.Name, prop.Value.ToString()); } } } MethodResult = Properties["DHCPEnabled"].ToLower() == "true" ? "DHCP" : "Static"; } catch (Exception ex) { ex.HandleException(); } return MethodResult; }
GetLocalIpAllocationMode()
将告诉您ip
是static
还是通过dhcp
分配的,而GetLocalIPAddress()
将告诉您本地的ip
本身。
这里的答案帮助了我自己的项目,但在我发现如何使用建议的方法之前,我不得不做一些研究。
使用System.Management;
添加System.Management;
你的代码本身不起作用。 您需要在识别命名空间之前添加对System.Management的引用。 (对于像我这样试过这个并且收到错误的新人,“管理类无法找到”)。
- 一个奇怪的Visual Studio 2010调试器案例(它不能达到一个断点)
- 将图像保存到WPF应用程序中的文件保持宽高比
- Linq where column ==(null reference)与column == null不同
- C#中VB格式的等价
- 添加到ObjectSet 的对象的多态删除不会引发ObjectSet上的IBindingList.ListChanged .IListSource.GetList()
- 在VS2010中的.Net 2.0项目中使用托管C ++(。Net 2.0)的问题
- 使用OLEDB Connection选择Excel工作表使用范围
- 为什么Lucene.Net索引器抛出System.IO.IOException未处理?
- 如何在C#中对齐控件和工具提示消息的右边缘