2009-05-20 108 views
1

我正在构建一个非常基本的表单应用程序。在C#.NET中检查静态或动态IP地址?

我可以在本地计算机上的可用IP地址的列表。但是,我还想确定如何获得这些地址(例如DHCP或静态)。如何判断系统上是否配置了静态IP地址?

目的是告知新手终端用户(谁可能没有网络设置,或如何获得它的知识)什么静态IP地址可用。而且,如果不存在静态地址,请通知他们需要进行设置。

TIA

+0

如果他们没有网络设置或如何确定它的知识,他们是如何准备做一个静态IP地址,当你告诉他们,他们需要吗? – 2009-05-20 22:08:38

+0

还要考虑到他们可能已经配置了他们的DHCP服务器来始终给他们相同的地址。因此它可以动态分配,但总是相同的。 – Dave 2009-05-21 04:45:03

回答

1

不幸的是,你可能不得不使用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)); 
      } 
     } 
2

您可以使用WMI来获取网络适配器配置。

举一个例子,看看http://www.codeproject.com/KB/system/cstcpipwmi.aspx。网络适​​配器上的'DhcpEnabled'属性应该告诉你该地址是否通过dhcp获取。

+0

诅咒我慢的打字技巧! – 2009-05-20 22:15:15

0

这些问题的答案在这里帮我用我自己的项目,但我不得不做一些研究之前,我发现了如何使用建议的方法。

添加使用System.Management;到您的代码本身不工作。在名称空间被识别之前,您需要添加对System.Management的引用。 (对于像我这样尝试过这样的新人,他们发现错误“管理类无法找到”)。

9
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; 
    } 
} 
1

我使用两种方法(S)如下:

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<string, string> Properties = new Dictionary<string, string>(); 

     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()会告诉你ipstatic或通过dhcp分配,而GetLocalIPAddress()会告诉你当地的ip本身。