最近在寫一個局域網控制軟件,需要得到本機IP以及網關地址。Google搜了一些,並沒有個很好的辦法,於是自己摸索寫下了這個方法。如果覺得有些地方欠妥的話,希望能夠回帖指正。謝謝!
/// <summary>
/// 得到本機IP
/// </summary>
private string GetLocalIP()
{
//本機IP地址
string strLocalIP = "";
//得到計算機名
string strPcName = Dns.GetHostName();
//得到本機IP地址數組
IPHostEntry ipEntry = Dns.GetHostEntry(strPcName);
//遍歷數組
foreach(var IPadd in ipEntry.AddressList)
{
//判斷當前字符串是否為正確IP地址
if (IsRightIP(IPadd.ToString()))
{
//得到本地IP地址
strLocalIP = IPadd.ToString();
//結束循環
break;
}
}
//返回本地IP地址
return strLocalIP;
}
//得到網關地址
private string GetGateway()
{
//網關地址
string strGateway = "";
//獲取所有網卡
NetworkInterface[] nics = NetworkInterface.GetAllNetworkInterfaces();
//遍歷數組
foreach (var netWork in nics)
{
//單個網卡的IP對象
IPInterfaceProperties ip = netWork.GetIPProperties();
//獲取該IP對象的網關
GatewayIPAddressInformationCollection gateways = ip.GatewayAddresses;
foreach(var gateWay in gateways)
{
//如果能夠Ping通網關
if(IsPingIP(gateWay.Address.ToString()))
{
//得到網關地址
strGateway = gateWay.Address.ToString();
//跳出循環
break;
}
}
//如果已經得到網關地址
if (strGateway.Length > 0)
{
//跳出循環
break;
}
}
//返回網關地址
return strGateway;
}
/// <summary>
/// 判斷是否為正確的IP地址
/// </summary>
/// <param name="strIPadd">需要判斷的字符串</param>
/// <returns>true = 是 false = 否</returns>
public static bool IsRightIP(string strIPadd)
{
//利用正則表達式判斷字符串是否符合IPv4格式
if (Regex.IsMatch(strIPadd, "[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}"))
{
//根據小數點分拆字符串
string[] ips = strIPadd.Split('.');
if (ips.Length == 4 || ips.Length == 6)
{
//如果符合IPv4規則
if (System.Int32.Parse(ips[0]) < 256 && System.Int32.Parse(ips[1]) < 256 & System.Int32.Parse(ips[2]) < 256 & System.Int32.Parse(ips[3]) < 256)
//正確
return true;
//如果不符合
else
//錯誤
return false;
}
else
//錯誤
return false;
}
else
//錯誤
return false;
}
/// <summary>
/// 嘗試Ping指定IP是否能夠Ping通
/// </summary>
/// <param name="strIP">指定IP</param>
/// <returns>true 是 false 否</returns>
public static bool IsPingIP(string strIP)
{
try
{
//創建Ping對象
Ping ping = new Ping();
//接受Ping返回值
PingReply reply = ping.Send(strIP, 1000);
//Ping通
return true;
}
catch
{
//Ping失敗
return false;
}
}
