コード例 #1
0
        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);
        }
コード例 #2
0
        // 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));
        }
コード例 #3
0
ファイル: UnitTest.cs プロジェクト: polytronicgr/HomeControl
        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);
        }
コード例 #4
0
        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);
        }