IPy模块是用来处理IPv4和IPv6地址的网络类工具

1.通过网段输出该网段下的IP个数和IP清单

>>> from IPy import IP 
>>> ip = IP('192.168.1.0/29')
>>> ip.len()
8
>>> for x in ip:
...     print(x)
... 
192.168.1.0
192.168.1.1
192.168.1.2
192.168.1.3
192.168.1.4
192.168.1.5
192.168.1.6
192.168.1.7

2.IP版本,反向解析,IP类型,IP转换等

>>> IP('10.0.0.0/8').version()
4   #IPv4版本
>>> IP('::1').version()
6   #IPv6版本
>>> from IPy import IP
>>> ip = IP('192.168.1.20')
>>> ip.reverseNames()   #反向解析地址
['20.1.168.192.in-addr.arpa.']
>>> ip.iptype()   
'PRIVATE'   #ip类型为私网类型
>>> IP('4.4.4.4').iptype()
'PUBLIC'   #公网类型
>>> IP('4.4.4.4').int()
67372036    #整型
>>> IP('4.4.4.4').strHex()
'0x4040404'   #十六进制
>>> IP('4.4.4.4').strBin()   #二进制
'00000100000001000000010000000100'
>>> print(IP(0x4040404))   #将十六进制转换成IP格式
4.4.4.4

3. 网络地址的转换

>>> IP('127.0.0.0/8')
IP('127.0.0.0/8')
>>> IP('127.0.0.0/255.0.0.0')
IP('127.0.0.0/8')
>>> IP('127.0.0.0-127.255.255.255')
IP('127.0.0.0/8')
>>> from IPy import IP
>>> print(IP('192.168.1.0/255.255.255.0',make_net=True))
192.168.1.0/24
>>> print(IP('192.168.1.0').make_net('255.255.255.0'))
192.168.1.0/24
>>> 

4. 定制要转换的地址为字符串

输出格式介绍:

wantprefixlen == 0 / None     don't return anything   1.2.3.0
wantprefixlen == 1            /prefix                 1.2.3.0/24
wantprefixlen == 2            /netmask                1.2.3.0/255.255.255.0
wantprefixlen == 3            -lastip                 1.2.3.0-1.2.3.255

使用strNormal方法指定不同wantprefixlen参数来定制输出不同类型的网段:

>>> IP('192.168.1.0/24').strNormal()
'192.168.1.0/24'
>>> 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'

5.多网络计算方法:

通常用来比较两个网段是否存在重叠。

1.判断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.判断两个网段是否存在重叠。使用overlaps方法。

>>> IP('192.168.0.0/23').overlaps('192.168.1.0/24')
1  #1代表存在重叠
>>> IP('192.168.0.0/23').overlaps('192.168.2.0')
0   #0代表不存在重叠

附上简单的Python程序:根据输入的IP或子网返回网络、 掩码、 广播、反向解析、子网数、 IP类型等信息。

#!/usr/bin/python
#--*-- coding:utf-8 --*--
#filename:show_ip.py
#author:dianel
#2018.3.26 17:20:23

from IPy import IP

def main():
        ip_s = raw_input("Please enter IP:")
        ip = IP(ip_s)
        if ip.len() > 1:
                print('net is: %s' %ip.net())
                print('netmask: %s' %ip.netmask())
                print('broadcast: %s' %ip.broadcast())
                print('reverse address: %s' %ip.reverseNames()[0])
                print('subnet: %s' %len(ip))
        else:
                print('reverses address: %s' %ip.reverseNames()[0])
                print('version: %s' %ip.version())
                print('iptype: %s' %ip.iptype())
                print('hexadecimal: %s' %ip.strHex())
if __name__ == '__main__':
        main()