Hoy, me surgio un problema… ¿Como obtengo el tipo de clase que pertenece una ip del sistema?
Si hacen memoria, tenemos las clases A,B,C,D,E.
http://es.wikipedia.org/wiki/Direcci%C3%B3n_IP
El codigo quedo simple:
/// <summary>
/// Rango de IP.
/// </summary>
public enum IPAddressRangeClass
{
//1.0.0.0 – 127.255.255.255
A,
//128.0.0.0 – 191.255.255.255
B,
//192.0.0.0 – 223.255.255.255
C,
//224.0.0.0 – 239.255.255.255
D,
//240.0.0.0 – 255.255.255.255
E
}
public class IPAddressRange
{
/// <summary>
/// <example>
/// IPAddressRangeClass classIP = IPAddressRange.GetClass(IPAddress.Parse(“10.0.0.0″));
/// if (classIP == IPAddressRangeClass.A || classIP == IPAddressRangeClass.B)
/// {
/// System.Console.WriteLine(“La IP es de clase A o B”);
/// }
/// System.Console.ReadLine();
/// </example>
/// </summary>
/// <param name=”ip”></param>
/// <returns></returns>
public static IPAddressRangeClass GetClass(IPAddress ip)
{
#region Rangos de IP
IPAddress classA_lower = IPAddress.Parse(“1.0.0.0″);
IPAddress classA_upper = IPAddress.Parse(“127.255.255.255″);
IPAddress classB_lower = IPAddress.Parse(“128.0.0.0″);
IPAddress classB_upper = IPAddress.Parse(“191.255.255.255″);
IPAddress classC_lower = IPAddress.Parse(“192.0.0.0″);
IPAddress classC_upper = IPAddress.Parse(“223.255.255.255″);
IPAddress classD_lower = IPAddress.Parse(“224.0.0.0″);
IPAddress classD_upper = IPAddress.Parse(“239.255.255.255″);
IPAddress classE_lower = IPAddress.Parse(“240.0.0.0″);
IPAddress classE_upper = IPAddress.Parse(“255.255.255.255″);
#endregion
IPAddressRange rangeA = new IPAddressRange(classA_lower, classA_upper);
IPAddressRange rangeB = new IPAddressRange(classB_lower, classB_upper);
IPAddressRange rangeC = new IPAddressRange(classC_lower, classC_upper);
IPAddressRange rangeD = new IPAddressRange(classD_lower, classD_upper);
IPAddressRange rangeE = new IPAddressRange(classE_lower, classE_upper);
if (rangeA.IsInRange(ip)) return IPAddressRangeClass.A;
if (rangeB.IsInRange(ip)) return IPAddressRangeClass.B;
if (rangeC.IsInRange(ip)) return IPAddressRangeClass.C;
if (rangeD.IsInRange(ip)) return IPAddressRangeClass.D;
if (rangeE.IsInRange(ip)) return IPAddressRangeClass.E;
throw new Exception(“No pertenece a ninguna clase”);
}
private AddressFamily addressFamily;
private byte[] lowerBytes;
private byte[] upperBytes;
private IPAddressRange()
{
}
public IPAddressRange(IPAddress lower, IPAddress upper)
{
// Assert that lower.AddressFamily == upper.AddressFamily
this.addressFamily = lower.AddressFamily;
this.lowerBytes = lower.GetAddressBytes();
this.upperBytes = upper.GetAddressBytes();
}
public bool IsInRange(IPAddress address)
{
if (address.AddressFamily != addressFamily)
{
return false;
}
byte[] addressBytes = address.GetAddressBytes();
bool lowerBoundary = true, upperBoundary = true;
for (int i = 0; i < this.lowerBytes.Length &&
(lowerBoundary || upperBoundary); i++)
{
if ((lowerBoundary && addressBytes[i] < lowerBytes[i]) ||
(upperBoundary && addressBytes[i] > upperBytes[i]))
{
return false;
}
lowerBoundary &= (addressBytes[i] == lowerBytes[i]);
upperBoundary &= (addressBytes[i] == upperBytes[i]);
}
return true;
}
}


