zoukankan      html  css  js  c++  java
  • CIDR

    需求:给定一个ip:172.28.68.0和一个CIDR格式的ip配置项ipConfig="172.28.64.0/22,172.28.72.11;172.16.0.0/12,172.28.80.27",判断该IP是在哪个cidr表示的地址段,并获取cidr格式后面的一个ip地址。 
        首先,要对cidr表示法要有所了解。 
        例如:172.28.64.0/22表示前22位不变,用1表示,后10位表示网络主机范围,相应的掩码表示为:11111111 11111111 11111100 00000000即该CIDR的掩码为:255.255.252.0 

        然后根据公式计算地址范围: 
       

      • 网络地址 = IP address & Mask     
      • 网络广播地址 = Network address + Mask反码     
      • 地址范围 = { 网络地址, 网络地址 + Mask反码}    

    方法一:使用IPy库

     

     

    [python] view plain copy
     
    1. >>> from IPy import IP  
    2. >>> ip = IP('127.0.0.0/30')  
    3. >>> for x in ip:  
    4. ...     print(x)       ##print前需要有tab空格  
    5. ...                        ##此处回车即可  
    6. 127.0.0.0  
    7. 127.0.0.1  
    8. 127.0.0.2  
    9. 127.0.0.3  

     

    方法二:使用netaddr库

     

    • CIDR也能直接转成IP地址段

     

     

    [python] view plain copy
     
    1. >>> from netaddr import *  
    2. >>> ip = IPNetwork('192.0.2.16/29')  
    3. >>> ip_list = list(ip)  
    4. >>> print(ip_list)  
    5. [IPAddress('192.0.2.16'), IPAddress('192.0.2.17'), IPAddress('192.0.2.18'), IPAddress('192.0.2.19'), IPAddress('192.0.2.20'), IPAddress('192.0.2.21'), IPAddress('192.0.2.22'), IPAddress('192.0.2.23')]  

     

    • IP段208.130.29.30-35转换成CIDR格式

     

    [python] view plain copy
     
    1. >>> from netaddr import *  
    2. >>> startip = '208.130.29.30'  
    3. >>> endip = '208.130.29.35'  
    4. >>> cidrs = netaddr.iprange_to_cidrs(startip, endip)  
    5. >>> for k, v in enumerate(cidrs):  
    6. ...     iplist = v  
    7. ...     print iplist  
    8. ...  
    9. 208.130.29.30/31  
    10. 208.130.29.32/30  
  • 相关阅读:
    linux 和unix 的区别
    Ubuntu 12.04下安装ibus中文输入法
    安装vmware tools失败解决方法
    snort简介以及在Ubuntu下的安装
    ubuntu下tcpdump使用
    securecrt在linux与windows之间传输文件(转)
    大数据处理时用到maven的repository
    Spark之命令
    Spark之集群搭建
    Spark之scala
  • 原文地址:https://www.cnblogs.com/askDing/p/8809974.html
Copyright © 2011-2022 走看看