在C#.NET中检查静态或动态IP地址?

时间:2009-05-20 21:51:47

标签: c# .net

我正在构建一个非常基本的表单应用程序。

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

目标是通知新手最终用户(可能不了解网络设置或如何获取网络设置)可用的静态IP地址。并且,如果不存在静态地址,请通知他们需要设置静态地址。

TIA

5 个答案:

答案 0 :(得分:12)

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 :(得分:2)

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

例如,请查看http://www.codeproject.com/KB/system/cstcpipwmi.aspx。网络适​​配器上的“DhcpEnabled”属性应告诉您该地址是否通过dhcp获取。

答案 2 :(得分: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));
            }
        }

答案 3 :(得分:1)

我使用以下两种方法:

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本身

答案 4 :(得分:0)

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

使用System.Management;添加到您的代码本身并不起作用。您需要在识别命名空间之前添加对System.Management的引用。 (对于像我这样试过这个并且收到错误的新人“管理类无法找到”)。