ip位址規劃是網路設計中非常重要的乙個環節,規劃的好壞會直接影響路由協議演算法的效率,包括網路效能、可擴充套件性等方面。
在這個過程中,免不了要計算大量的ip位址,包括網段、網路掩碼、廣播位址、子網數、ip型別等
一、ip位址、網段的基本處理
ip類常見的手段包括解析名稱、ip型別、ip轉化等
in [1]: from ipy importipin [2]: len(ip('
192.168.0.0/16
')) #
統計該網段的ip位址個數
out[2]: 65536in [3]: ip = ip("
192.168.1.20
") #
例項化乙個ip
in [4]: ip.reversenames() #
反向解析位址格式
out[4]: ['
20.1.168.192.in-addr.arpa.']
in [5]: ip.iptype() #
私網型別
out[5]: '
private
'in [6]: ip("
8.8.8.8
").iptype() #
公網型別
out[6]: '
public
'in [7]: ip("
8.8.8.8
").int() #
轉化成整形格式
out[7]: 134744072in [9]: ip("
8.8.8.8
").strhex() #
轉化為十六進製制格式
out[9]: '
0x8080808
'in [10]: ip("
8.8.8.8
").strbin() #
轉化為二進位制格式
out[10]: '
00001000000010000000100000001000
'in [11]: print(ip(0x8080808)) #
將十六進製制轉化為ip格式
8.8.8.8
ip方法也包括網路位址的轉換,例如根據ip與掩碼生產網段的格式。
in [12]: print(ip("192.168.1.0
").make_net("
255.255.255.0"))
192.168.1.0/24in [13]: print(ip("
192.168.1.0/255.255.255.0
",make_net=true))
192.168.1.0/24in [14]: print(ip("
192.168.1.0-192.168.1.255
",make_net=true))
192.168.1.0/24
也可以通過strnormal方法指定不同wantprefixlen引數值以定製不同輸出型別的網段,輸出型別為字串。
in [19]: ip("192.168.1.0/24
").strnormal(0) #
無返回值
out[19]: '
192.168.1.0
'in [20]: ip("
192.168.1.0/24
").strnormal(1) #
prefix格式
out[20]: '
192.168.1.0/24
'in [21]: ip("
192.168.1.0/24
").strnormal(2) #
decimalnetmask格式
out[21]: '
192.168.1.0/255.255.255.0
'in [22]: ip("
192.168.1.0/24
").strnormal(3) #
lastip格式
out[22]: '
192.168.1.0-192.168.1.255
'
二、多網路計算方法
有時候我們想比較兩個網段是否存在包含、重疊關係,ipy就可以支援類似於資料型別的比較。
in [23]: ip("192.168.1.0
") < ip("
192.168.1.1")
out[23]: true
in [24]: '
192.168.1.10
'in ip("
192.168.1.0/24")
out[24]: true #
ip是否包含在另乙個網段中
in [26]: ip("
192.168.1.0/24
") in ip("
192.168.0.0/16")
out[26]: true #
網段是否包含在另乙個網段中
#判斷兩個網段是否存在重疊
in [27]: ip("
192.168.0.0/23
").overlaps("
192.168.1.0/24")
out[27]: 1 #
1代表存在重疊
in [28]: ip("
192.168.0.0/23
").overlaps("
192.168.1.0")
out[28]: 1in [29]: ip("
192.168.1.0/24
").overlaps("
192.168.2.0/24")
out[29]: 0 #
0代表不存在重疊
綜合例項:根據輸入的ip或子網返回網路、掩碼、廣播、反向解析、子網數等
#!/usr/bin/env python
#coding:utf-8
from ipy import
ipip_s = raw_input("
請輸入乙個ip或者網段:")
ips =ip(ip_s)
if len(ips) > 1:
"" %ips.net()
"子網掩碼: %s
" %ips.netmask()
"網路廣播位址 : %s
" %ips.broadcast()
"位址反向解析: %s
" %ips.reversenames()[0]
"網路子網數: %s
" %len(ips)
else
:
"ip反向解析: %s
" %ips.reversenames()[0]
"" %ips.strhex()
"" %ips.strbin()
"位址型別: %s
" % ips.iptype()
執行結果:
#輸入乙個**
[root@localhost script]#
python ip.py
請輸入乙個ip或者網段:192.168.1.1ip反向解析: 1.1.168.192.in-addr.arpa.
[root@localhost script]
#python ip.py
#輸入乙個網段
[root@localhost script]#
python ip.py
IP位址處理模組IPy
安裝 pip install ipy from ipy import ip 1 ip型別 ip ip 192.168.0.0 16 返回4 2 ip位址的子網個數 print ip.len 3 反向解析位址格式 ip ip 192.168.0.0 16 print ip.reversenames 4...
實用的IP位址處理模組IPy
在ip位址規劃中,涉及到計算大量的ip位址,包括網段 網路掩碼 廣播位址 子網數 ip型別等。所以我們使用ipy處理這些問題。安裝 pip install ipy 或 pip install ipy 0.81判斷通過version方法就可以區分出ipv4與ipv6。import ipy ip 10....
IPy Python中ip位址處理模組
在ip位址規劃中,涉及到計算大量的ip位址,包括網段 網路掩碼 廣播位址 子網數 ip型別等。別擔心,ipy模組拯救你。ipy模組可以很好的輔助我們高效的完成ip的規劃工作。pip install ipy 目前 conda 好像不支援 1.ipy模組包含ip類,使用它可以方便處理絕大部分格式為ipv...