Advertisement
Guest User

10002691 - Programatically adding Static IP's

a guest
Apr 3rd, 2012
123
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 2.35 KB | None | 0 0
  1. void Main()
  2. {
  3.     Test("192.168.1.10/29");
  4.     Test("72.26.196.160/29");
  5. }
  6.  
  7. public void Test(string subnetAddress)
  8. {
  9.     Console.WriteLine("==" + subnetAddress + "==");
  10.     var subnet = IPSubnet.Parse(subnetAddress);
  11.     foreach (var ip in subnet)
  12.         ip.Dump();
  13. }
  14.  
  15. // Define other methods and classes here
  16. public class IPSubnet : IEnumerable<string>
  17. {
  18.     private long _ipAddressLong;
  19.     private int _subnetMaskSize;
  20.     private IPSubnet(long ipAddressLong, int subnetMaskSize)
  21.     {
  22.         _ipAddressLong = ipAddressLong;
  23.         _subnetMaskSize = subnetMaskSize;
  24.     }
  25.    
  26.     public static IPSubnet Parse(string ipstring)
  27.     {
  28.         var parts = ipstring.Split('/');
  29.         var ipAddressBytes = GetBytes(parts[0]);
  30.         var ipAddressLong = ConvertToLong(ipAddressBytes);
  31.         var subnetMaskSize = Convert.ToInt32(parts[1]);
  32.         return new IPSubnet(ipAddressLong, subnetMaskSize);
  33.     }
  34.    
  35.     public IEnumerator<string> GetEnumerator()
  36.     {
  37.         var mask = (1L << (32 - _subnetMaskSize)) - 1;
  38.         var ipAddressMin = (_ipAddressLong & (-mask - 1)) + 1;
  39.         var ipAddressStart = Math.Max(ipAddressMin, _ipAddressLong);
  40.         var ipAddressEnd = _ipAddressLong | mask - 1;
  41.         for (var ip = ipAddressStart; ip <= ipAddressEnd; ip++)
  42.             yield return ConvertToString(ip);
  43.     }
  44.    
  45.     IEnumerator IEnumerable.GetEnumerator()
  46.     {
  47.         return GetEnumerator();
  48.     }
  49.    
  50.     private static string ToBinary(long ipAddress)
  51.     {
  52.         return Convert.ToString(ipAddress, 2);
  53.     }
  54.    
  55.     private static byte[] GetBytes(string ipAddress)
  56.     {
  57.         var ipAddressParts = ipAddress.Split('.');
  58.         var ipAddressBytes = new byte[4];
  59.         for (var i = 0; i < 4; i++)
  60.             ipAddressBytes[i] = (byte)Convert.ToInt32(ipAddressParts[i]);
  61.         return ipAddressBytes;
  62.     }
  63.    
  64.     private static long ConvertToLong(byte[] ipAddressBytes)
  65.     {
  66.         var ipAddressLong = (ipAddressBytes[0] * 1L << 24) + (ipAddressBytes[1] * 1L << 16) + (ipAddressBytes[2] * 1L << 8) + ipAddressBytes[3];
  67.         return ipAddressLong;
  68.     }
  69.    
  70.     private static byte[] ConvertToBytes(long address)
  71.     {
  72.         var bytes = new byte[4];
  73.         for (var i = 3; i >= 0; i--)
  74.         {
  75.             bytes[i] = (byte)(address & 0xFF);
  76.             address >>= 8;
  77.         }
  78.         return bytes;
  79.     }
  80.    
  81.     private static string ConvertToString(long ipAddressLong)
  82.     {
  83.         var bytes = ConvertToBytes(ipAddressLong);
  84.         var ip = string.Join(".", bytes);
  85.         return ip;
  86.     }
  87.    
  88.     public string ToString()
  89.     {
  90.         var ip = ConvertToString(_ipAddressLong);
  91.         return ip + "/" + _subnetMaskSize;
  92.     }
  93. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement