我正在構建一個非常基本的表單應用程序。在C#.NET中檢查靜態或動態IP地址?
我可以在本地計算機上的可用IP地址的列表。但是,我還想確定如何獲得這些地址(例如DHCP或靜態)。如何判斷系統上是否配置了靜態IP地址?
目的是告知新手終端用戶(誰可能沒有網絡設置,或如何獲得它的知識)什麼靜態IP地址可用。而且,如果不存在靜態地址,請通知他們需要進行設置。
TIA
我正在構建一個非常基本的表單應用程序。在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));
}
}
您可以使用WMI來獲取網絡適配器配置。
舉一個例子,看看http://www.codeproject.com/KB/system/cstcpipwmi.aspx。網絡適配器上的'DhcpEnabled'屬性應該告訴你該地址是否通過dhcp獲取。
詛咒我慢的打字技巧! – 2009-05-20 22:15:15
這些問題的答案在這裏幫我用我自己的項目,但我不得不做一些研究之前,我發現瞭如何使用建議的方法。
添加使用System.Management;
到您的代碼本身不工作。在名稱空間被識別之前,您需要添加對System.Management的引用。 (對於像我這樣嘗試過這樣的新人,他們發現錯誤「管理類無法找到」)。
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;
}
}
我使用兩種方法(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()
會告訴你ip
是static
或通過dhcp
分配,而GetLocalIPAddress()
會告訴你當地的ip
本身。
如果他們沒有網絡設置或如何確定它的知識,他們是如何準備做一個靜態IP地址,當你告訴他們,他們需要嗎? – 2009-05-20 22:08:38
還要考慮到他們可能已經配置了他們的DHCP服務器來始終給他們相同的地址。因此它可以動態分配,但總是相同的。 – Dave 2009-05-21 04:45:03