示例#1
0
 def clean(self):
     """Checks the CIDR to determine if it maps to a valid IPv4 network."""
     if self.cidr:
         try:
             netaddr.cidr_to_glob(self.cidr)
         except (TypeError, netaddr.AddrFormatError) as err:
             raise me.ValidationError(err)
def interpreter_ip_to_section_ip(ips_list):
    """
        提供一个功能,将CIDR表示的IP转换成 IP段的表示方法如,不连续的段会以#分隔开,注意以CIDR表示的IP,必须表示的是
        一段或多段连续的IP,不可是一段连续的ip,一段独立的ip的形式:
        ['10.33.0.15/32','10.33.0.16/29','10.33.0.24/32']转换为"10.33.0.15-10.33.0.24"
        :param ips_list: list,以CIDR表示的ip
        :return:string  以ip网段表示的一个ip段
        """
    ip_net = []
    ip_string = ""
    int_to_ip = lambda x: '.'.join(
        [str(x / (256**i) % 256) for i in range(3, -1, -1)])
    for ips in ips_list:
        ip_net.append(netaddr.glob_to_iprange(netaddr.cidr_to_glob(ips)))
    ip_start = ip_net[0].key()[1]
    ip_end = ip_net[0].key()[2]
    for index in xrange(len(ip_net)):
        if ip_net[index].key()[1] - 1 <= ip_end:
            ip_end = ip_net[index].key()[2]
            if index == len(ip_net) - 1:
                ip_end = ip_net[index].key()[2]
                ip_string += "%s-%s#" % (int_to_ip(ip_start),
                                         int_to_ip(ip_end))
        else:
            if index == len(ip_net) - 1:
                ip_string += "%s-%s#" % (int_to_ip(ip_start),
                                         int_to_ip(ip_end))
            ip_string += "%s-%s#" % (int_to_ip(ip_start), int_to_ip(ip_end))
            ip_start = ip_net[index].key()[1]
            ip_end = ip_net[index].key()[2]
    ip_string = ip_string[:-1]
    return ip_string
示例#3
0
 def getIPv4LocalAddressList(self):
   """Returns currently configured local IPv4 addresses which are in ipv4_local_network"""
   if not socket.AF_INET in netifaces.ifaddresses(self.name):
     return []
   return [dict(addr=q['addr'], netmask=q['netmask']) for q in
     netifaces.ifaddresses(self.name)[socket.AF_INET] if netaddr.IPAddress(
       q['addr'], 4) in netaddr.glob_to_iprange(
         netaddr.cidr_to_glob(self.ipv4_local_network))]
示例#4
0
  def _generateRandomIPv4Address(self, netmask):
    # no addresses found, generate new one
    # Try 10 times to add address, raise in case if not possible
    try_num = 10
    while try_num > 0:
      addr = random.choice([q for q in netaddr.glob_to_iprange(
        netaddr.cidr_to_glob(self.ipv4_local_network))]).format()
      if dict(addr=addr, netmask=netmask) not in self.getIPv4LocalAddressList():
        # Checking the validity of the IPv6 address
        if self._addSystemAddress(addr, netmask, False):
          return dict(addr=addr, netmask=netmask)
        try_num -= 1

    raise AddressGenerationError(addr)
示例#5
0
文件: forms.py 项目: hgw/rhizome.org
 def clean_ip_networks(self):
     ip_networks = self.cleaned_data["ip_networks"]
     ip_networks = ip_networks.replace(" ", "").replace("\r\n","")
     ip_networks_as_list = [cidr for cidr in ip_networks.split("," )]
     cleaned_networks_list = []
     for cidr in ip_networks_as_list:
         if cidr:
             if cidr != ",":
                 try:  
                     cidr_as_glob = cidr_to_glob("%s" % cidr)
                     if valid_glob(cidr_as_glob):
                         cleaned_networks_list.append(cidr)
                     else:
                         raise forms.ValidationError(_("%s is not a valid ip range." % cidr))
                 except:
                     raise forms.ValidationError(_("%s is not a valid ip range." % cidr))
             else: 
                 pass
     return ','.join(cleaned_networks_list)
示例#6
0
 def clean_ip_networks(self):
     ip_networks = self.cleaned_data["ip_networks"]
     ip_networks = ip_networks.replace(" ", "").replace("\r\n", "")
     ip_networks_as_list = [cidr for cidr in ip_networks.split(",")]
     cleaned_networks_list = []
     for cidr in ip_networks_as_list:
         if cidr:
             if cidr != ",":
                 try:
                     cidr_as_glob = cidr_to_glob("%s" % cidr)
                     if valid_glob(cidr_as_glob):
                         cleaned_networks_list.append(cidr)
                     else:
                         raise forms.ValidationError(
                             _("%s is not a valid ip range." % cidr))
                 except:
                     raise forms.ValidationError(
                         _("%s is not a valid ip range." % cidr))
             else:
                 pass
     return ','.join(cleaned_networks_list)
示例#7
0
def test_cidr_to_glob():
    assert cidr_to_glob('10.0.0.1/32') == '10.0.0.1'
    assert cidr_to_glob('192.0.2.0/24') == '192.0.2.*'
    assert cidr_to_glob('172.16.0.0/12') == '172.16-31.*.*'
    assert cidr_to_glob('0.0.0.0/0') == '*.*.*.*'