用于处理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' % ()) #输出网络地址 print('netmask: %s' % mask()) #输出网络掩码地址 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()) #输出地址类型,为公网还是私网