Helper for IPv4 operations
This class implements some operations with IP adress. For example '192.168.0.255' + 1 = '192.168.1.0'.
P.S.: Standart IPAddress class has "Adress" property for getting IP as "long" that is marked as deprecated so I relize it by my self.
static class IPOperations
{
/// <summary>
/// Convert IP address to unsigned int value
/// </summary>
public static UInt32 ToUInt(System.Net.IPAddress ip)
{
return ToUInt(ip.GetAddressBytes());
}
/// <summary>
/// Convert IP address to unsigned int value
/// </summary>
public static UInt32 ToUInt(byte[] bip)
{
if (bip == null) throw new ArgumentNullException();
if (bip.Length < 4)
throw new FormatException(
"IPOperations: parameter byte[] ip must have 4 or more elements.");
return (uint)(bip[3] | (bip[2] << 8) | (bip[1] << 16) | (bip[0] << 24));
}
/// <summary>
/// Convert IP address to unsigned int value
/// </summary>
/// <exception cref="System.ArgumentNullException"></exception>
/// <exception cref="System.FormatException"></exception>
public static UInt32 ToUInt(string ip)
{
return ToUInt(System.Net.IPAddress.Parse(ip));
}
/// <summary>
/// Convert IP to string
/// </summary>
public static string ToString(long ip)
{
return ToString(ToByte((uint)ip));
}
/// <summary>
/// Convert IP to string
/// </summary>
public static string ToString(byte[] ip)
{
if (ip == null) throw new ArgumentNullException();
if (ip.Length < 4)
throw new FormatException(
"IPOperations: parameter byte[] ip must have 4 or more elements.");
return ip[0] + "." + ip[1] + "." + ip[2] + "." + ip[3];
}
/// <summary>
/// Convert IP to byte array
/// </summary>
public static byte[] ToByte(UInt32 ip)
{
byte[] res = new byte[4];
res[3] = (byte)ip;
ip = ip >> 8;
res[2] = (byte)ip;
ip = ip >> 8;
res[1] = (byte)ip;
ip = ip >> 8;
res[0] = (byte)ip;
return res;
}
/// <summary>
/// Increment ip address
/// </summary>
/// <param name="ip">ip
public static System.Net.IPAddress Inc(System.Net.IPAddress ip)
{
return new System.Net.IPAddress(ToUInt(ip) + 1);
}
public static System.Net.IPAddress Inc(long ip)
{
return new System.Net.IPAddress(ip + 1);
}
/// <summary>
/// subtraction ip's
/// </summary>
/// <param name="ip1">minuend
/// <param name="ip2">subtrahend
/// <returns> = ip1 - ip2</returns>
public static long Sub(System.Net.IPAddress ip1, System.Net.IPAddress ip2)
{
return ToUInt(ip1) - ToUInt(ip2);
}
}