用于处理IPv4和IPv6地址和网络的类和工具

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

#! /env python3
#coding=utf-8
#使用pip install IPy,最新版本为0.83

'''
IP地址、网段的基本处理
'''
import IPy

from IPy import IP #调用IP
ip_v4 = IP('192.168.1.0/24').version() #判断ipv4地址段的类型
ip_v6 = IP('::1').version() #判断ipv6地址段的类型
print (ip_v4)
print (ip_v6)
ip = IP('192.168.1.0/24') #输入192.168.1.0/24网段
print (ip.len()) #192.168.1.0/24的网段的IP个数
for x in ip:
    print (x)  #输出192.168.1.0/24网段所有的ip清单
''''
解析名称、IP类型、IP转换等
'''
ip_adr = IP('192.168.1.20')
print (ip_adr.reverseNames()) #反向解析地址格式
ip_adr_type = IP('8.8.8.8').iptype() #判断8.8.8.8为公网地址还是私网地址
print (ip_adr_type)
ip_adr_int = IP('8.8.8.8').int() #将地址转换为整数形式
ip_adr_hex = IP('8.8.8.8').strHex() #转换为16进制格式
ip_adr_bin = IP('8.8.8.8').strBin() #转换为二进制格式
print (ip_adr_int)
print (ip_adr_hex)
print (ip_adr_bin)
'''
网络地址转换,例如根据IP与掩码生产网段格式
'''
ip_net = IP('192.168.1.0')
print (ip_net.make_net('255.255.255.0')) #获取192.168.1.0与掩码255.255.255.0计算,CDR格式,192.168.1.0/24
print (IP('192.168.1.0/255.255.255.0',make_net=True)) #将192.168.1.0/255.255.255.0地址格式转换为192.168.1.0/24
print (IP('192.168.1.0-192.168.1.255',make_net=True)) #将192.168.1.0-192.168.1.255地址段转换为192.168.1.0/24格式

'''
通过strNormal方法指定不同wanprefixlen参数以制定不同的输出类型网络。输出类型为字符串
'''
print ((IP('192.168.1.0/24')).strNormal(0)) #wanltprefixlen=0,无返回,例如192.168.1.0
print ((IP('192.168.1.0/24')).strNormal(1)) #wanltprefixlen=1,prefix格式,如192.168.1.0/24
print ((IP('192.168.1.0/24')).strNormal(2)) #wanltprefixlen=2,decimalnetmask格式,如192.168.1.0/255.255.255.0;
print ((IP('192.168.1.0/24')).strNormal(3)) #wanltprefixlen=3,lastIP格式,如192.168.1.0-192.168.1.255

'''
多网络计算方法
'''
IP('10.0.0.0/24') < IP('12.0.0.0/24')#判断10.0.0.0/24网段小于12.0.0.0/24,输出结果为TRUE
IP('192.168.1.100') in IP('192.168.1.0/24')#判断192.168.1.100地址是否在192.168.1.0/24网段中,输出结果为TRUE

'''
判断两个网段是否存在存在重叠,采用IPy提供的overlaps方法
'''
IP('192.168.0.0/23').overlaps('192.168.1.0/24')   #返回值为1,代为为重叠
IP('192.168.1.0/24').overlaps('192.168.2.0')      #返回值为0,代表为不存在重叠

根据输入的IP或者子网返回网络、掩码、广播、反向解析,子网数等信息输出结果

#! /env python3
#coding=utf-8
'''
根据输入的IP或者子网返回网络,掩码,广播,方向解析,子网数,ip类型等信息
'''
from IPy import IP
ip_s = input('Please input an IP or net-range: ')   #接收用户输入,参数为IP地址或者网络地址
ips = IP(ip_s)
if len(ips) > 1:      #为1个网络地址
    print('net: %s' % ips.net())         #输出网络地址
    print('netmask: %s' % ips.netmask())    #输出网络掩码地址
    print('broadcast: %s' % ips.broadcast())    #输出网络广播地址
    print('reverse address: %s' % ips.reverseNames()[0])    #输出地址反向解析
    print('subnet: %s' % len(ips))    #输出网络子网数
else:    #为单个IP地址
    print('reverse address: %s' % ips.reverseNames()[0])  #输出IP反向解析

print('hexadecimal: %s' % ips.strHex())    #16进制地址格式
print('binary ip: %s' % ips.strBin())    #二进制地址格式
print('iptype: %s' % ips.iptype())            #输出地址类型,为公网还是私网