實用的IP位址處理子產品IPy
在IP位址規劃中,涉及到計算大量的IP位址,包括網段、網絡掩碼、廣播位址、子網數、IP類型等
别擔心,Ipy子產品拯救你。Ipy子產品可以很好的輔助我們高效的完成IP的規劃工作。
源碼方式安裝Ipy子產品
$ wget https://pypi.python.org/packages/source/I/IPy/IPy-0.81.tar.gz --no-check-certificate
$ tar zxvf IPy-0.81.tar.gz
$ cd IPy-0.81/
$ sudo python setup.py install
IP位址、網段的基本處理
-
IPy子產品包含IP類,使用它可以友善處理絕大部分格式為IPv6的網絡和位址
比如通過version方法來區分出IPv4和IPv6
>>> import IPy >>> IPy.IP('10.0.0.0/8').version() 4 >>> IPy.IP('::1').version() 6
-
通過指定的網段輸出該網段的IP個數和所有的IP位址清單
如下:
$ more ip.py #!/usr/bin/env python import IPy ip = IPy.IP('192.168.0.0/16') print ip.len() for x in ip: print x
- 反向解析名稱、IP類型、IP轉換等
>>> ip = IP('192.168.1.20') >>> ip.reverseNames() #反向解析位址格式 ['20.1.168.192.in-addr.arpa.'] >>> ip.iptype() #私網類型 'PRIVATE' >>> IP('8.8.8.8').iptype() #公網類型 'PUBLIC' >>> IP('8.8.8.8').int() #轉換為整型格式 134744072 >>> IP('8.8.8.8').strHex() #轉換為十六進制格式 '0x8080808' >>> IP('8.8.8.8').strBin() #轉換成二進制格式 '00001000000010000000100000001000' >>> print IP('0x8080808') #十六進制轉換為IP格式 8.8.8.8 >>> print IP(134744072) #整型格式轉換為IP格式 8.8.8.8
- IP方法也支援網絡位址的轉換,例如根據IP和掩碼産生網段格式
>>> print (IP('192.168.1.0').make_net('255.255.255.0')) 192.168.1.0/24 >>> print (IP('192.168.1.0/255.255.255.0',make_net=True)) 192.168.1.0/24 >>> print (IP('192.168.1.0-192.168.1.255',make_net=True)) 192.168.1.0/24
- 通過strNormal方法指定不同wantprefixlen參數值以定制不同輸出類型的網段,輸出類型為字元串
>>> IP('192.168.1.0/24').strNormal(0) #無傳回 '192.168.1.0' >>> IP('192.168.1.0/24').strNormal(1) #prefix格式 '192.168.1.0/24' >>> IP('192.168.1.0/24').strNormal(2) #decimalnetmask格式 '192.168.1.0/255.255.255.0' >>> IP('192.168.1.0/24').strNormal(3) #lastIP格式 '192.168.1.0-192.168.1.255'
多網絡計算方法詳解
比較兩個網段是否存在包含、重疊等關系,比如同網絡但不同prefixlen會認為是不相等的網段,如10.0.0.0/16不等于10.0.0.0/24,另外即使具有相同的prefixlen但處于不同的網絡位址,同樣也視為不相等,如10.0.0.0/16不等于192.0.0.0/16。IPy支援類似于數值型資料的比較,以幫助IP對象進行比較。
- 比較IP大小
>>> IP('10.0.0.0/24') < IP('12.0.0.0/24') True
- 判斷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
- 判斷兩個網段是否存在重疊(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/24') 0
學習書本:《Python自動化運維技術與最佳實踐》--劉天斯
本文為原創,若轉載,請注明出處,謝謝
勿忘初心,放得始終