美文网首页
Python之IPy

Python之IPy

作者: 村东头老骥 | 来源:发表于2020-06-06 10:12 被阅读0次

    IPy

    简介:IPy-用于处理IPv4和IPv6地址和网络的类和工具。

    网址: https://github.com/autocracy/python-ipy/

    API介绍:

    IP类允许一个舒适的解析并处理大多数用于IPv4和IPv6地址和网络的符号。它受到RIPE的Perl模块NET :: IP界面的极大启发,但不共享实现。它不共享非CIDR网络掩码,所以像这样的时髦网络掩码0xffffff0f无法在这里完成。

    安装

    [root@localhost ~]# pip3 install IPy
    Collecting IPy
      Downloading https://files.pythonhosted.org/packages/88/28/79162bfc351a3f1ab44d663ab3f03fb495806fdb592170990a1568ffbf63/IPy-0.83.tar.gz
    Installing collected packages: IPy
      Running setup.py install for IPy ... done
    Successfully installed IPy-0.83
    

    IP地址网段处理

    IPy模块包含IP类,使用它可以方便处理绝大部分格式为IPv6及IPv4的网络和地址。比如通过version方法可以区分IPv4与IPv6

    示例

    import IPy
    IPy.IP('10.0.0.0/8').version() # 4
    
    IPy.IP('::1').version() # 6
    

    通过指定的网段输出该网段的IP个数及所有IP地址清单

    示例

    from IPy import IP
    ip=IP('192.168.1.0/24')
    ip.len() # 256 #输出192.168.1.0/24网段的IP个数
    
    for x in ip:    #输出192.168.1.0/24网段的所有IP清单
        print x
      
    192.168.1.0
    192.168.1.1
    192.168.1.2
    192.168.1.3
    

    IP类的几个常见的方法,包括反向解析名称、IP类型、IP转换等

    from IPy import IP
    ip = IP('192.168.121.1')
    
    ip.reverseNames()   #反向解析地址格式
    ['1.121.168.192.in-addr.arpa.']
    
    ip.iptype()        #192.168.121.1为私网类型'PRIVATE'
    'PRIVATE'
    
    IP('8.8.8.8').iptype()        #8.8.8.8为公网类型
    '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
    IP('192.168.1.0').make_net('255.255.255.0')
    IP('192.168.1.0/24')
    
    IP('192.168.1.0/255.255.255.0',make_net=True)
    IP('192.168.1.0/24')
    
    IP('192.168.1.0-192.168.1.255',make_net=True)
    IP('192.168.1.0/24')
    

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

    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。

    from IPy import IP
    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)
    '192.168.1.0/255.255.255.0'
    
    IP('192.168.1.0/24').strNormal(3)
    '192.168.1.0-192.168.1.255'
    

    判断IP地址是否在该网络内

    '192.168.13.249' in IP('192.168.0.0/24') # False
    '192.168.13.249' in IP('192.168.0.0/16') # True
    

    示例

    # coding=utf-8
    
    from IPy import IP
    
    # 输入ip地址
    ip_input = raw_input('Input ip address: ')
    ip_address = IP(ip_input)
    
    if len(ip_address) > 1: # 如果长度大于1,表示为网络号,非具体的IP地址
            print ip_address.net()
            print ip_address.broadcast()
            print ip_address.netmask()
    else:
            # 当输入的为IP地址的时候
            print ip_address
            print ip_address.strBin()
            
    # 输出
    Input ip address: 192.168.8.70
    192.168.8.70
    11000000101010000000100001000110
    # 输入
    Input ip address: 192.168.8.0/24
    192.168.8.0
    192.168.8.255
    255.255.255.0
    

    判断是否是共有地址或者私有地址

    #coding=utf-8
    
    from IPy import IP
    
    ip_input = raw_input("Input IP address:")
    ip_address = IP(ip_input)
    print ip_address.iptype()
    
    
    Input IP address:192.168.9.7
    PRIVATE
    [root@shell auto]# python public_ip.py 
    Input IP address:10.0.0.8
    PRIVATE
    [root@shell auto]# python public_ip.py 
    Input IP address:123.1.2.3
    PUBLIC
    

    相关文章

      网友评论

          本文标题:Python之IPy

          本文链接:https://www.haomeiwen.com/subject/byqazhtx.html