您的位置:首页 > 编程语言 > Python开发

Python学习笔记-IP地址处理模块Ipy

2017-06-26 16:41 671 查看
IP地址处理模块Ipy

IPy模块可以很好的辅助我们高效完成IP的规划工作。

参考:https://github.com/autocracy/python-ipy

安装IPy模块

1[root@kurol ~]# python36 -m easy_install -i http://pypi.douban.com/simple/ IPy
导入模块1In [12]: from IPy import IP

1、IP地址、网段的基本处理

通过version区分IPv4和IPv6:
12345In [13]: testip = ('10.0.0.0/8','::1')In [14]: IP(testip[0]).version()Out[14]: 4In [15]: IP(testip[1]).version()Out[15]: 6
通过指定的网段输出该网段的IP个数及所有IP地址清单:12345678910In [25]: testip1 = IP('192.168.1.0/24')In [26]: print (testip1.len())256In [27]: for x in testip1: ...: print (x) ...: 192.168.1.0192.168.1.1192.168.1.2......

IP类常用方法:
12345678910111213141516171819202122In [32]: testip2 = IP('192.168.100.10')In [33]: testip2.reverseNames() #反向解析地址格式Out[33]: ['10.100.168.192.in-addr.arpa.']In [34]: testip2.iptype()   #返回IP类型,192.168.100.10为私有地址Out[34]: 'PRIVATE'In [35]: IP('8.8.8.8').iptype()   #返回IP类型,8.8.8.8为共有地址Out[35]: 'PUBLIC'In [36]: testip2.int()  #转换成整型格式Out[36]: 3232261130In [37]: testip2.strHex()   #转换成十六进制格式Out[37]: '0xc0a8640a'In [38]: testip2.strBin()   #转换成二进制格式Out[38]: '11000000101010000110010000001010'In [39]: print (IP(0xc0a8640a))   #十六进制转成IP格式192.168.100.10
网络地址转换,根据IP与掩码生成网段格式:123456In [47]: print (IP('192.168.1.0').make_net('255.255.255.0'))192.168.1.0/24In [48]: print (IP('192.168.1.0/255.255.255.0',make_net=True))192.168.1.0/24In [49]: print (IP('192.168.1.0-192.168.1.255',make_net=True))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

1234567891011121314In [52]: IP('192.168.1.0/24').strNormal(wantprefixlen=0)Out[52]: '192.168.1.0'In [53]: IP('192.168.1.0/24').strNormal(wantprefixlen=1)Out[53]: '192.168.1.0/24'#省略wantprefixlenIn [54]: IP('192.168.1.0/24').strNormal(0)Out[54]: '192.168.1.0'In [55]: IP('192.168.1.0/24').strNormal(1)Out[55]: '192.168.1.0/24'In [56]: IP('192.168.1.0/24').strNormal(2)Out[56]: '192.168.1.0/255.255.255.0'In [57]: IP('192.168.1.0/24').strNormal(3)Out[57]: '192.168.1.0-192.168.1.255'


2、多网络计算方法 IPy支持类似于数值型数据的比较,以帮助IP对象进行比较1234In [67]: IP('10.0.0.0/24') > IP('12.0.0.0/24')Out[67]: FalseIn [68]: IP('10.0.0.0/24') < IP('12.0.0.0/24')Out[68]: True

判断IP地址和网段是否包含于另一个网段中:
123456In [69]: '192.168.1.100' in IP('192.168.1.0/24')Out[69]: TrueIn [70]: '192.168.2.100' in IP('192.168.1.0/24')Out[70]: FalseIn [71]: '192.168.1.0/24' in IP('192.168.0.0/16')Out[71]: True

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

实例:根据输入的IP或子网返回网络、掩码、广播、反向解析、子网数、IP类型等信息:
1[root@kurol pkg1]# vim testip.py
1234567891011121314151617181920#!/usr/bin/python#coding:utf-8#from IPy import IPimport sys reload(sys)sys.setdefaultencoding('utf-8')ip_test = raw_input('请输入IP地址或网段地址:')ips = IP(ip_test)if len(ips) > 1: print ('网络地址:%s' % ips.net()) print ('掩码:%s' % ips.netmask()) print ('网络广播地址:%s' % ips.broadcast()) print ('地址反向解析:%s' % ips.reverseNames()) print ('网络子网数:%s' % len(ips))else: print ('IP反向解析 %s' % ips.reverseNames())print ('此IP地址转换成十六进制: %s' % ips.strHex())print ('此IP地址转换成二进制: %s' % ips.strBin())print ('此IP地址类型: %s' % ips.iptype())


执行结果:

1234567891011121314151617[root@kurol pkg1]# python testip.py 请输入IP地址或网段地址:192.168.1.0/24网络地址:192.168.1.0掩码:255.255.255.0网络广播地址:192.168.1.255地址反向解析:['1.168.192.in-addr.arpa.']网络子网数:256此IP地址转换成十六进制: 0xc0a80100此IP地址转换成二进制: 11000000101010000000000100000000此IP地址类型: PRIVATE[root@kurol pkg1]# python testip.py 请输入IP地址或网段地址:192.168.1.1IP反向解析 ['1.1.168.192.in-addr.arpa.']此IP地址转换成十六进制: 0xc0a80101此IP地址转换成二进制: 11000000101010000000000100000001此IP地址类型: PRIVATE


Open source is not only a kind of behavior, it is a faith. 欢迎交流,QQ:526653382
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: