簡體   English   中英

在 C# .NET 中檢查靜態或動態 IP 地址?

[英]Checking static or dynamic IP address in C# .NET?

我正在構建一個非常基本的表單應用程序。

我可以獲得本地計算機上可用的 IP 地址列表。 但是,我還想確定如何獲取這些地址(例如 DHCP 或靜態)。 如何判斷系統上是否配置了靜態 IP 地址?

目標是告知新手最終用戶(他們可能不了解網絡設置或如何獲取網絡設置)哪些靜態 IP 地址可用。 並且,如果不存在靜態地址,則通知他們需要設置一個。

TIA

由於與 WMI 相比具有更好的性能,因此更好地使用 Net.NetworkInformation

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

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

這里的答案幫助我完成了我自己的項目,但在我發現如何使用建議的方法之前,我必須做一些研究。

添加使用System.Management; 對您的代碼本身不起作用。 在識別命名空間之前,您需要添加對 System.Management 的引用。 (對於像我這樣嘗試過並收到錯誤“找不到管理類”的新人)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM