Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- void Main()
- {
- Test("192.168.1.10/29");
- Test("72.26.196.160/29");
- }
- public void Test(string subnetAddress)
- {
- Console.WriteLine("==" + subnetAddress + "==");
- var subnet = IPSubnet.Parse(subnetAddress);
- foreach (var ip in subnet)
- ip.Dump();
- }
- // Define other methods and classes here
- public class IPSubnet : IEnumerable<string>
- {
- private long _ipAddressLong;
- private int _subnetMaskSize;
- private IPSubnet(long ipAddressLong, int subnetMaskSize)
- {
- _ipAddressLong = ipAddressLong;
- _subnetMaskSize = subnetMaskSize;
- }
- public static IPSubnet Parse(string ipstring)
- {
- var parts = ipstring.Split('/');
- var ipAddressBytes = GetBytes(parts[0]);
- var ipAddressLong = ConvertToLong(ipAddressBytes);
- var subnetMaskSize = Convert.ToInt32(parts[1]);
- return new IPSubnet(ipAddressLong, subnetMaskSize);
- }
- public IEnumerator<string> GetEnumerator()
- {
- var mask = (1L << (32 - _subnetMaskSize)) - 1;
- var ipAddressMin = (_ipAddressLong & (-mask - 1)) + 1;
- var ipAddressStart = Math.Max(ipAddressMin, _ipAddressLong);
- var ipAddressEnd = _ipAddressLong | mask - 1;
- for (var ip = ipAddressStart; ip <= ipAddressEnd; ip++)
- yield return ConvertToString(ip);
- }
- IEnumerator IEnumerable.GetEnumerator()
- {
- return GetEnumerator();
- }
- private static string ToBinary(long ipAddress)
- {
- return Convert.ToString(ipAddress, 2);
- }
- private static byte[] GetBytes(string ipAddress)
- {
- var ipAddressParts = ipAddress.Split('.');
- var ipAddressBytes = new byte[4];
- for (var i = 0; i < 4; i++)
- ipAddressBytes[i] = (byte)Convert.ToInt32(ipAddressParts[i]);
- return ipAddressBytes;
- }
- private static long ConvertToLong(byte[] ipAddressBytes)
- {
- var ipAddressLong = (ipAddressBytes[0] * 1L << 24) + (ipAddressBytes[1] * 1L << 16) + (ipAddressBytes[2] * 1L << 8) + ipAddressBytes[3];
- return ipAddressLong;
- }
- private static byte[] ConvertToBytes(long address)
- {
- var bytes = new byte[4];
- for (var i = 3; i >= 0; i--)
- {
- bytes[i] = (byte)(address & 0xFF);
- address >>= 8;
- }
- return bytes;
- }
- private static string ConvertToString(long ipAddressLong)
- {
- var bytes = ConvertToBytes(ipAddressLong);
- var ip = string.Join(".", bytes);
- return ip;
- }
- public string ToString()
- {
- var ip = ConvertToString(_ipAddressLong);
- return ip + "/" + _subnetMaskSize;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement