using System.Collections.Generic;
using System.Net;
namespace Sodao.FastSocket.SocketBase.Utils
{
///
/// ip utility
///
static public class IPUtility
{
#region Private Members
///
/// A类: 10.0.0.0-10.255.255.255
///
static private long ipABegin, ipAEnd;
///
/// B类: 172.16.0.0-172.31.255.255
///
static private long ipBBegin, ipBEnd;
///
/// C类: 192.168.0.0-192.168.255.255
///
static private long ipCBegin, ipCEnd;
#endregion
#region Constructors
///
/// static new
///
static IPUtility()
{
ipABegin = ConvertToNumber("10.0.0.0");
ipAEnd = ConvertToNumber("10.255.255.255");
ipBBegin = ConvertToNumber("172.16.0.0");
ipBEnd = ConvertToNumber("172.31.255.255");
ipCBegin = ConvertToNumber("192.168.0.0");
ipCEnd = ConvertToNumber("192.168.255.255");
}
#endregion
#region Public Methods
///
/// ipaddress convert to long
///
///
///
static public long ConvertToNumber(string ipAddress)
{
return ConvertToNumber(IPAddress.Parse(ipAddress));
}
///
/// ipaddress convert to long
///
///
///
static public long ConvertToNumber(IPAddress ipAddress)
{
var bytes = ipAddress.GetAddressBytes();
return bytes[0] * 256 * 256 * 256 + bytes[1] * 256 * 256 + bytes[2] * 256 + bytes[3];
}
///
/// true表示为内网IP
///
///
///
static public bool IsIntranet(string ipAddress)
{
return IsIntranet(ConvertToNumber(ipAddress));
}
///
/// true表示为内网IP
///
///
///
static public bool IsIntranet(IPAddress ipAddress)
{
return IsIntranet(ConvertToNumber(ipAddress));
}
///
/// true表示为内网IP
///
///
///
static public bool IsIntranet(long longIP)
{
return ((longIP >= ipABegin) && (longIP <= ipAEnd) ||
(longIP >= ipBBegin) && (longIP <= ipBEnd) ||
(longIP >= ipCBegin) && (longIP <= ipCEnd));
}
///
/// 获取本机内网IP
///
///
static public IPAddress GetLocalIntranetIP()
{
var list = Dns.GetHostEntry(Dns.GetHostName()).AddressList;
foreach (var child in list)
{
if (IsIntranet(child)) return child;
}
return null;
}
///
/// 获取本机内网IP列表
///
///
static public List GetLocalIntranetIPList()
{
var list = Dns.GetHostEntry(Dns.GetHostName()).AddressList;
var result = new List();
foreach (var child in list)
{
if (IsIntranet(child)) result.Add(child);
}
return result;
}
#endregion
}
}