这个示例只是简单的根据IP的地址段来判断网络是局域网还是广域网。但在某些复杂的网络情况下可能并不适用,仅做参考吧。
我们认为ABC类外的IP地址就是广域网IP,ABC类IP的址段分别如下:
A类:10.0.0.0~10.255.255.255
B类:172.16.0.0~172.31.255.255
C类:192.168.0.0~192.168.255.255
示例代码如下:
/// <summary>
/// IP辅助类
/// </summary>
public static class IPHelper
{
/// <summary>
/// 判断指定IP是否为广域网IP
/// </summary>
/// <param name="ipAddress">要测试的IP地址</param>
/// <returns>地址分类</returns>
/// <remarks>0:无效IP,1:局域网IP,2:广域网IP</remarks>
public static int GetIPType(string ipAddress)
{
//ABC类外的IP地址为广域网IP
//A类:10.0.0.0~10.255.255.255
//B类:172.16.0.0~172.31.255.255
//C类:192.168.0.0~192.168.255.255
//返回值
//0:无效IP
//1:局域网IP
//2:广域网IP
if (ipAddress == "127.0.0.1")
{
return 1;
}
string[] ipAddressList = ipAddress.Split('.');
int ipAddressTemp;
//检查IP地址是否有效
if (ipAddressList.Length != 4)
{
return 0;
}
if (!(int.TryParse(ipAddressList[0], out ipAddressTemp) && int.TryParse(ipAddressList[1], out ipAddressTemp)
&& int.TryParse(ipAddressList[2], out ipAddressTemp) && int.TryParse(ipAddressList[3], out ipAddressTemp)))
{
return 0;
}
if (!(int.Parse(ipAddressList[0]) >= 0 && int.Parse(ipAddressList[0]) <= 255
&& int.Parse(ipAddressList[1]) >= 0 && int.Parse(ipAddressList[1]) <= 255
&& int.Parse(ipAddressList[2]) >= 0 && int.Parse(ipAddressList[2]) <= 255
&& int.Parse(ipAddressList[3]) >= 0 && int.Parse(ipAddressList[3]) <= 255))
{
return 0;
}
//局域网IP
if (int.Parse(ipAddressList[0]) == 10
|| (int.Parse(ipAddressList[0]) == 172 && int.Parse(ipAddressList[1]) >= 16 && int.Parse(ipAddressList[1]) <= 31)
|| (int.Parse(ipAddressList[0]) == 192 && int.Parse(ipAddressList[1]) == 168))
{
return 1;
}
return 2;
}
}