zoukankan      html  css  js  c++  java
  • IP地址处理模块IPy

    简介

        IP地址规划是网络设计中比较重要的一个环节,规划的好坏直接影响路由协议算法的效率,包括网络性能、可扩展方面,这个过程需要计算大量的IP地址,包括网段、网络掩码、广播地址、子网数、IP类型等。IPy模块可以很好的辅助我们高效完成IP的规划工作。

    模块安装

    1、pip 安装方式

    pip install IPy

    2、源码安装方式

    $ wget https://pypi.python.org/packages/source/I/IPy/IPy-0.81.tar.gz --no-check-certificate
    $ tar zxvf IPy-0.81.tar.gz
    $ cd IPy-0.81/
    $ sudo python setup.py install 

    模块使用

     1、IP地址网段的基本处理

    • 通过指定的网段输出该网段的IP个数及所有IP地址清单
    >>> from IPy import IP
    >>> ip = IP('192.168.0.0/16')
    >>> print ip.len()#输出192.168.0.0/16网段IP个数
    65536
    >>> for x in ip: #输出该网段所有IP清单
    ...     print x
    • 其他常用方法
    >>> from IPy import IP
    >>> ip = IP('192.168.1.20')
    >>> ip.reverseNames() #反向解析地址格式
    ['20.1.168.192.in-addr.arpa.']
    >>> ip.iptype() #192.168.1.20 为私网类型'PRIVATE'
    'PRIVATE'
    >>> IP('8.8.8.8').iptype() #8.8.8.8 为公网类型'PUBLIC'
    'PUBLIC'
    >>> IP('8.8.8.8').int() #转换为整型格式
    134744072
    >>> IP('8.8.8.8').strHex() #转换为十六进制格式
    '0x8080808'
    >>> IP('8.8.8.8').strBin() #转换为二进制格式
    '00001000000010000000100000001000'
    >>> print(IP(0x8080808)) #十六进制转成IP格式
    8.8.8.8
    >>>   

    IP方法也支持网络地址的转换,例如根据IP和掩码生成网段格式

    >>> from IPy import IP
    >>> print (IP('192.168.1.0').make_net('255.255.255.0'))
    192.168.1.0/24
    >>> print (IP('192.168.1.0/255.255.255.0',make_net=True))
    192.168.1.0/24
    >>> print (IP('192.168.1.0-192.168.1.255',make_net=True))
    192.168.1.0/24
    >>> 

    通过strNormal方法指定不同的wantprefixlen参数值以定制不同输出类型的字段。输出类型也为字符串,如下:

    >>> IP('192.168.1.0/24').strNormal(0)
    '192.168.1.0'
    >>> IP('192.168.1.0/24').strNormal(1) #网络段格式
    '192.168.1.0/24'
    >>> IP('192.168.1.0/24').strNormal(2)#网络IP/子网掩码方式
    '192.168.1.0/255.255.255.0'
    >>> IP('192.168.1.0/24').strNormal(3) #起止IP方式
    '192.168.1.0-192.168.1.255'
    >>>   

    wantprefixlen的取值含义:

    wantprefixlen=0,无返回,如192.168.1.0;

    wantprefixlen=1,prefix格式,如192.168.1.0/24;

    wantprefixlen=2,decimalnetmask格式,如192.168.1.0/255.255.255.0;

    wantprefixlen=3,lastIP格式,如192.168.1.0-192.168.1.255。

     2、多网络计算方法

         有时候我们想比较两个网段是否存在包含、重叠等关系,比如同网络但不同prefixlen会认为是不相等的网段,例如10.0.0.0/16 不等于10.0.0.0/24,另外即使具备相同的prefixlen但处于不同的网络地址,同样也是不相等的,如192.168.0.0/16不等于10.168.0.0/16。IPy支持类似于数值类型的比较,以帮助IP对象进行比较,比如:

    >>> IP('10.0.0.0/24') < IP('10.0.0.0/16')
    False
    • 判断IP地址和网段是否包含于另一个网段中
    >>> from IPy import IP
    >>> '192.168.1.100' in IP('192.168.1.0/24')
    True
    >>> IP('192.168.1.0/24') in IP('192.168.0.0/16')
    True
    • 判断2个网段是否存在重叠,采用IPy的overlaps方法
    >>> IP('192.168.0.0/23').overlaps('192.168.1.0/24')
    1  #返回1代表存在重叠
    >>> IP('192.168.1.0/24').overlaps('192.168.2.0')
    0 #返回0代表不存在重叠
    >>> 
    • 示例练习,根据输入的IP或子网返回网络、掩码、广播、反向解析、子网数、IP类型等信息
    from IPy import IP
    ip_s = raw_input('Please input an IP or net-range: ') #接收用户输入参数为IP或者网段地址
    ips  = IP(ip_s)
    if len(ips) > 1: #做为一个网络地址
        print ('net: %s' % ips.net()) #输出网络地址
        print ('netmask: %s' % ips.netmask()) #输出子网掩码地址
        print ('broadcast: %s' % ips.broadcast()) #输出广播地址
        print ('reverse address: %s' % ips.reverseName()[0] ) #输出地址反向解析
        print ('subnet: %s' % len(ips)) #输出网络IP个数
    else: #为单个IP情况
        print ('reverse address: %s' % ips.reverseName()[0]) #输出IP反向解析
    
    print ('hexadecimal: %s' % ips.strHex()) #输出十六进制地址
    print ('binary ip: %s' % ips.strBin())  #输出二进制地址
    print ('iptype: %s' %ips.iptype())
    • 运行结果
    Please input an IP or net-range: 192.168.1.0/24
    net: 192.168.1.0
    netmask: 255.255.255.0
    broadcast: 192.168.1.255
    reverse address: 1
    subnet: 256
    hexadecimal: 0xc0a80100
    binary ip: 11000000101010000000000100000000
    iptype: PRIVATE
    
    =================================
    Please input an IP or net-range: 192.168.1.20
    reverse address: 2
    hexadecimal: 0xc0a80114
    binary ip: 11000000101010000000000100010100
    iptype: PRIVATE
    
  • 相关阅读:
    CSS3—— 2D转换 3D转换 过渡 动画
    CSS3——边框 圆角 背景 渐变 文本效果
    CSS3——表单 计数器 网页布局 应用实例
    CSS3——提示工具 图片廓 图像透明 图像拼接技术 媒体类型 属性选择器
    CSS3——对齐 组合选择符 伪类 伪元素 导航栏 下拉菜单
    CSS3——分组和嵌套 尺寸 display显示 position定位 overflow float浮动
    CSS3——盒子模型 border(边框) 轮廓(outline)属性 margin外边距 padding填充
    Eclipse连接数据库报错Local variable passwd defined in an enclosing scope must be final or effectively final
    数据库——单表查询
    数据库——添加,修改,删除
  • 原文地址:https://www.cnblogs.com/Jabe/p/8836388.html
Copyright © 2011-2022 走看看