Python之實用的IP地址處理模塊IPy


實用的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地址、網段的基本處理

  1. IPy模塊包含IP類,使用它可以方便處理絕大部分格式為IPv6的網絡和地址

    比如通過version方法來區分出IPv4和IPv6

    >>> import IPy
    >>> IPy.IP('10.0.0.0/8').version()
    4
    >>> IPy.IP('::1').version()
    6
    
  2. 通過指定的網段輸出該網段的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
    
  3. 反向解析名稱、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
    
  4. 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
    
  5. 通過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對象進行比較。

  1. 比較IP大小

    >>> IP('10.0.0.0/24') < IP('12.0.0.0/24')
    True
    
  2. 判斷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
    
  3. 判斷兩個網段是否存在重疊(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自動化運維技術與最佳實踐》--劉天斯
本文為原創,若轉載,請注明出處,謝謝


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM