zoukankan      html  css  js  c++  java
  • 制定ip池内随机生成ip地址

    static char *get_ip(const char *ip_pool, char value[256])
      {
          char ip_addr[256+1] = {0};
          unsigned mask = 0x0;
          sscanf(ip_pool, "%[^/]/%d", ip_addr, &mask);
          long long ip_l = htonl(inet_addr(ip_addr));
          for (unsigned i = 31-mask; i < 32; i++)
              mask = mask | (1 << i);
      
          long long min_ip_l = ip_l & (mask & 0xffffffff);                                                                              
          long long max_ip_l = ip_l | (~mask & 0xffffffff);
          ip_l = min_ip_l + rand()%(max_ip_l-min_ip_l+1);
      
          struct in_addr addr;
          addr.s_addr = ntohl(ip_l);
          strcpy(value, inet_ntoa(addr));
          return value;
      }
    # RANDOM_IP_POOL=['192.168.10.222/24']
    RANDOM_IP_POOL=['180.3.11.0/24']
    def __get_random_ip():
        str_ip = RANDOM_IP_POOL[random.randint(0,len(RANDOM_IP_POOL) - 1)]                                                              
        str_ip_addr = str_ip.split('/')[0]
        str_ip_mask = str_ip.split('/')[1]
        ip_addr = struct.unpack('>I',socket.inet_aton(str_ip_addr))[0]
        mask = 0x0 
        for i in range(31, 31 - int(str_ip_mask), -1):
            mask = mask | ( 1 << i)
        ip_addr_min = ip_addr & (mask & 0xffffffff)
        ip_addr_max = ip_addr | (~mask & 0xffffffff)
        return socket.inet_ntoa(struct.pack('>I', random.randint(ip_addr_min, ip_addr_max)))
     # 网络字节序到主机字节序的转换
    def ip2num(ip):
        ip = [int(x) for x in ip.split('.')]                                                                                            
        return ip[0] << 24 | ip[1] << 16 | ip[2] << 8 | ip[3]
    
    def num2ip(num):
        return '%s.%s.%s.%s' % (
            (num & 0xff000000) >> 24,
            (num & 0x00ff0000) >> 16,
            (num & 0x0000ff00) >> 8,
            (num & 0x000000ff
            )
        )
    def gen_ips(start, end):
        """生成IP地址"""
        # if num & 0xff 过滤掉 最后一段为 0 的IP
        return [num2ip(num) for num in range(start, end + 1) if num & 0xff]
  • 相关阅读:
    Spring ListFactoryBean实例
    Spring集合 (List,Set,Map,Properties) 实例
    Spring Bean作用域实例
    Spring内部bean实例
    Spring bean加载多个配置文件
    如何注入值到Spring bean属性
    Spring Bean引用例子
    Spring构造方法注入类型歧义
    Spring JavaConfig @Import实例
    Spring JavaConfig实例
  • 原文地址:https://www.cnblogs.com/sanghai/p/6344038.html
Copyright © 2011-2022 走看看