Python學習筆記-IP地址處理模塊Ipy
阿新 • • 發佈:2017-06-14
模塊 python ipy
IP地址處理模塊Ipy
IPy模塊可以很好的輔助我們高效完成IP的規劃工作。
參考:https://github.com/autocracy/python-ipy
安裝IPy模塊
[[email protected] ~]# python36 -m easy_install -i http://pypi.douban.com/simple/ IPy
導入模塊
In [12]: from IPy import IP
1、IP地址、網段的基本處理
通過version區分IPv4和IPv6:
In [13]: testip = (‘10.0.0.0/8‘,‘::1‘) In [14]: IP(testip[0]).version() Out[14]: 4 In [15]: IP(testip[1]).version() Out[15]: 6
通過指定的網段輸出該網段的IP個數及所有IP地址清單:
In [25]: testip1 = IP(‘192.168.1.0/24‘) In [26]: print (testip1.len()) 256 In [27]: for x in testip1: ...: print (x) ...: 192.168.1.0 192.168.1.1 192.168.1.2 ......
IP類常用方法:
In [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]: 3232261130 In [37]: testip2.strHex() #轉換成十六進制格式 Out[37]: ‘0xc0a8640a‘ In [38]: testip2.strBin() #轉換成二進制格式 Out[38]: ‘11000000101010000110010000001010‘ In [39]: print (IP(0xc0a8640a)) #十六進制轉成IP格式 192.168.100.10
網絡地址轉換,根據IP與掩碼生成網段格式:
In [47]: print (IP(‘192.168.1.0‘).make_net(‘255.255.255.0‘)) 192.168.1.0/24 In [48]: print (IP(‘192.168.1.0/255.255.255.0‘,make_net=True)) 192.168.1.0/24 In [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
In [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‘ #省略wantprefixlen In [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對象進行比較
In [67]: IP(‘10.0.0.0/24‘) > IP(‘12.0.0.0/24‘) Out[67]: False In [68]: IP(‘10.0.0.0/24‘) < IP(‘12.0.0.0/24‘) Out[68]: True
判斷IP地址和網段是否包含於另一個網段中:
In [69]: ‘192.168.1.100‘ in IP(‘192.168.1.0/24‘) Out[69]: True In [70]: ‘192.168.2.100‘ in IP(‘192.168.1.0/24‘) Out[70]: False In [71]: ‘192.168.1.0/24‘ in IP(‘192.168.0.0/16‘) Out[71]: True
判斷兩個網段是否存在重疊,采用IPy提供的overlaps方法:
In [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類型等信息:
[[email protected] pkg1]# vim testip.py
#!/usr/bin/python #coding:utf-8 # from IPy import IP import 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())
執行結果:
[[email protected] 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 [[email protected] pkg1]# python testip.py 請輸入IP地址或網段地址:192.168.1.1 IP反向解析 [‘1.1.168.192.in-addr.arpa.‘] 此IP地址轉換成十六進制: 0xc0a80101 此IP地址轉換成二進制: 11000000101010000000000100000001 此IP地址類型: PRIVATE
本文出自 “謝育政” 博客,請務必保留此出處http://kurolz.blog.51cto.com/11433546/1935068
Python學習筆記-IP地址處理模塊Ipy