美文网首页python
21. Python之IPy模块

21. Python之IPy模块

作者: 随便写写咯 | 来源:发表于2021-06-01 01:12 被阅读0次

    1 安装

    1.1 pip安装

    pip3 install IPy
    

    1.2 安装后确认

    >>> import IPy
    >>> dir(IPy)
    ['INT_TYPES', 'IP', 'IPSet', 'IPV6_MAP_MASK', 'IPV6_TEST_MAP', 'IPint', 'IPv4ranges', 'IPv6ranges', 'MAX_IPV4_ADDRESS', 'MAX_IPV6_ADDRESS', 'STR_TYPES', '_BitTable', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', '__version__', '_checkNetaddrWorksWithPrefixlen', '_checkNetmask', '_checkPrefix', '_count0Bits', '_count1Bits', '_countFollowingZeros', '_intToBin', '_ipVersionToLen', '_netmaskToPrefixlen', '_parseAddressIPv6', '_prefixlenToNetmask', '_remove_subprefix', 'bisect', 'collections_abc', 'intToIp', 'parseAddress', 'types', 'xrange']
    

    2 模块的基本使用

    语法:
    IP("地址|网段").方法()
    

    2.1 .version()

    识别ip地址分类
    
    >>> from IPy import IP
    >>> IP("10.0.0.0").version() # 如果是具体地址, 不要加掩码, 会报错
    4
    >>> IP("10.0.0.0/24").version()
    4
    

    2.2 .len()

    获取网段ip地址数量
    
    >>> IP("10.0.0.0/24").len() 
    256
    
    >>> IP("10.0.0.1").len() 
    1
    
    # 如果是具体地址, 不要加掩码, 会报错
    >>> IP("10.0.0.1/24").len()
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
      File "C:\Python38\lib\site-packages\IPy.py", line 263, in __init__
        raise ValueError("%s has invalid prefix length (%s)" % (repr(self), self._prefixlen))
    ValueError: IP('10.0.0.1/24') has invalid prefix length (24) 
    

    2.3 获取一个网段, 所有的ip地址

    from IPy import IP
    
    ip_range = IP("10.0.0.0/30") 
    for i in ip_range:
        print(i)
    
    10.0.0.0
    10.0.0.1
    10.0.0.2
    10.0.0.3
    
    # IP()的结果, 就是括号中的ip地址本身, 属于类
    # 可以直接for循环, 遍历IP("网段")中的ip信息
    <class 'IPy.IP'>
    

    2.4 获取一个网段, 可用的ip地址, 并存到指定文件

    import IPy
    
    input_ip = input('Please type ip add in CIDR format(10.0.0.0/24): ').strip()
    
    ip_list = IPy.IP('{}'.format(input_ip))  # 输出的地址包括网络位和广播地址
    
    sum_ip = len(ip_list)-2  # 减去网络位和广播地址
    
    print('Total Available IP is {}'.format(sum_ip))
    
    src_file = input("Please type where you would like to save the result in absolute path: ").strip()
    
    with open(r'{}'.format(src_file), mode = 'wt', encoding = 'utf-8') as f: # 将ip地址存到指定文件
        for i in ip_list:
            f.write(str('{}\n'.format(i)))
    

    3 ip地址基本操作

    3.1 反向地址解析

    >>> from IPy import IP
    >>> ip = IP("10.0.0.0")
    >>> print(ip.reverseNames())
    ['0.0.0.10.in-addr.arpa.']
    

    3.2 查看地址类型

    IP("10.0.0.0").iptype()
    

    3.3 格式转换

    • 给定ip地址和Netmask, 转成CIDR格式的网络地址(给定的IP值是主机地址)
    from IPy import IP
    ip_addr = IP("192.168.1.10")
    ip_result = ip_addr.make_net("255.255.255.0")
    print(ip_result)
    >> 192.168.1.0/24
    
    • 给定ip和Netmask, 转成CIDR格式的网络地址(给定的IP值是网络地址)
    from IPy import IP
    ip_addr = IP("172.17.0.0")
    ip_result = ip_addr.make_net("255.255.0.0")
    print(ip_result)
    >> 172.17.0.0/16
    
    • 根据网络地址和广播地址, 求出其属于的网段(给的值必须是网络地址和广播地址, 否则报错)
    from IPy import IP
    ip_addr = "192.168.10.0-192.168.10.255"
    ip_result = IP(ip_addr,make_net=True)
    print(ip_result)
    >> 
    192.168.10.0/24
    

    3.4 输出一个网段的不同信息

    利用.strNormal()通过wantprefixlen数值, 来获取一个网段的不同信息
    要求输入是一个网段
    
    from IPy import IP
    ip_net = '192.168.1.0/24'
    print(IP(ip_net).strNormal(wantprefixlen=0))
    print(IP(ip_net).strNormal(wantprefixlen=1))
    print(IP(ip_net).strNormal(wantprefixlen=2))
    print(IP(ip_net).strNormal(wantprefixlen=3))
    
    192.168.1.0 
    192.168.1.0/24
    192.168.1.0/255.255.255.0
    192.168.1.0-192.168.1.255
    

    相关文章

      网友评论

        本文标题:21. Python之IPy模块

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