public static String GetNextFreeIP(String subnet, String minIp = "", String maxIp = "") { String ip = "0.0.0.0"; List <String> existingClients = findDhcpClients(AcademicDHCPServer, subnet).Select(client => client.ip).ToList(); if (!minIp.Equals("") && !existingClients.Contains(minIp)) { return(minIp); } List <ipaddr> addresses = new List <ipaddr>(); foreach (String ipstr in existingClients) { addresses.Add(new ipaddr(ipstr)); } addresses.Sort(); if (!minIp.Equals("")) { ipaddr min = new ipaddr(minIp); List <ipaddr> cutList = new List <ipaddr>(); foreach (ipaddr addr in addresses) { if (addr.CompareTo(min) >= 0) { cutList.Add(addr); } } addresses = cutList; } if (!maxIp.Equals("")) { ipaddr max = new ipaddr(maxIp); List <ipaddr> cutList = new List <ipaddr>(); foreach (ipaddr addr in addresses) { if (addr.CompareTo(max) <= 0) { cutList.Add(addr); } } addresses = cutList; } foreach (ipaddr addr in addresses) { if (!addresses.Contains(addr.next())) { return(addr.next().ip); } } return(ip); }
// Overrides the ConvertFrom method of TypeConverter. public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value) { if (value is string) { string address = (string)value; ipaddr result = IPAddress.Parse(address); return(result); } return(base.ConvertFrom(context, culture, value)); }
public void TestIPAddressV4() { ipaddr value = new ipaddr(); Assert.True(value.NotConfigured); value = new IPAddress(new byte[] { 127, 0, 0, 1 }); Assert.False(value.NotConfigured); Assert.Equal(new IPAddress(new byte[] { 127, 0, 0, 1 }), (IPAddress)value); var registers = value.ToRegisters(); Assert.NotEmpty(registers); Assert.Equal(2, registers.Length); value = registers; Assert.False(value.NotConfigured); Assert.Equal(new IPAddress(new byte[] { 127, 0, 0, 1 }), (IPAddress)value); string json = JsonConvert.SerializeObject(value); var convert = JsonConvert.DeserializeObject <ipaddr>(json); Assert.Equal((IPAddress)convert, (IPAddress)value); string text = ((IPAddress)value).ToString(); convert = IPAddress.Parse(text); Assert.Equal(convert, value); }
public static List <String> GetRangeOfFreeIPs(String subnet, int count, String minIp = "", String maxIp = "") { List <String> ips = new List <string>(); List <String> existingClients = findDhcpClients(AcademicDHCPServer, subnet).Select(client => client.ip).ToList(); List <ipaddr> addresses = new List <ipaddr>(); ipaddr dotone = (new ipaddr(subnet)).next(); addresses.Add(dotone); foreach (String ipstr in existingClients) { addresses.Add(new ipaddr(ipstr)); } addresses.Sort(); if (!minIp.Equals("")) { ipaddr min = new ipaddr(minIp); List <ipaddr> cutList = new List <ipaddr>(); foreach (ipaddr addr in addresses) { if (addr.CompareTo(min) >= 0) { cutList.Add(addr); } } addresses = cutList; } if (!maxIp.Equals("")) { ipaddr max = new ipaddr(maxIp); List <ipaddr> cutList = new List <ipaddr>(); foreach (ipaddr addr in addresses) { if (addr.CompareTo(max) <= 0) { cutList.Add(addr); } } addresses = cutList; } foreach (ipaddr addr in addresses) { ipaddr next = addr.next(); while (!addresses.Contains(next) && count > 0) { ips.Add(next.ip); count--; next = next.next(); } if (count <= 0) { break; } } return(ips); }