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 } }