亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

工程師奇技淫巧-IP段轉(zhuǎn)換CIDR(python篇)

原創(chuàng) 2016-11-16 10:20:17 780
摘要:電商系統(tǒng)大考雙十一過去了,可以找點時間寫點東西了。這次說說提升工作效率。講工程效率提升的文章有很多,我們先不看團隊的。從個體小處如何減少機械性,重復性的工作,是切切實實提高個人幸福感的一件事。由于工作上的原因,經(jīng)常需要給外包服務商開通訪問內(nèi)部系統(tǒng)的白名單。我們知道根據(jù)網(wǎng)絡上通路到達web系統(tǒng)不同,大致上可以分為兩類訪問控制:nginx上的七層訪問控制,完全由應用上的配置文件控制訪問IP,該方式的好

電商系統(tǒng)大考雙十一過去了,可以找點時間寫點東西了。

這次說說提升工作效率。講工程效率提升的文章有很多,我們先不看團隊的。從個體小處如何減少機械性,重復性的工作,是切切實實提高個人幸福感的一件事。

由于工作上的原因,經(jīng)常需要給外包服務商開通訪問內(nèi)部系統(tǒng)的白名單。我們知道根據(jù)網(wǎng)絡上通路到達web系統(tǒng)不同,大致上可以分為兩類訪問控制:

nginx上的七層訪問控制,完全由應用上的配置文件控制訪問IP,該方式的好處也是壞處,就是需要開發(fā)明確知道并維護nginx上的白名單配置文件,同樣的只要有了這份配置文件,理論上名單不會丟,應用基線可以保證多機房部署。

防火墻控制,此種方式對應用透明,應用開發(fā)不需要關心白名單控制,問題也是明顯的,防火墻ACL控制在跨機房時并不能跟隨,有幾個機房就要同時維護幾份白名單,對運維系統(tǒng)也有要求,同一份IP段要支持多機房下發(fā)。

故事的起點就在這,防火墻的ACL控制下發(fā)要求提供CIDR格式的規(guī)則。什么是CIDR格式?直接看自由的百科全書的解釋:

無類別域間路由(Classless Inter-Domain Routing、CIDR)是一個用于給用戶分配IP地址以及在互聯(lián)網(wǎng)上有效地路由IP數(shù)據(jù)包的對IP地址進行歸類的方法。

CIDR看起來就是這樣的: 208.130.29.0/24

比如有個需求就是208.130.29.30-35這個IP段換成CIDR格式,有幾個只學過基礎網(wǎng)絡知識的開發(fā)懂這個?

作為一個開發(fā)人員做這個換算是很費勁的,比如要去網(wǎng)上用類似以下這個巨難用的表格來做網(wǎng)段和CIDR格式的換算,還要搞清楚/32 /31 /29 這些似乎跟web開發(fā)沒有多大關系的知識。

wKioL1gquUnA2iquAADM6BeOegg095.png-wh_651x-s_3494154119.png

在經(jīng)歷了痛苦和挫折后,一個偶然的機會,發(fā)現(xiàn)python居然有現(xiàn)成的類庫支持此類網(wǎng)絡操作與換算。 將以上的需求翻譯成python只要幾行代碼搞定:

# 確定起始和結(jié)尾IP,無論多復雜都可以轉(zhuǎn)換
startip = '208.130.29.30'
endip = '208.130.29.35'
cidrs = netaddr.iprange_to_cidrs(startip, endip)
for k, v in enumerate(cidrs):
    iplist = v
    print iplist

輸出:
208.130.29.30/31
208.130.29.32/30

反過來,CIDR也能直接轉(zhuǎn)成IP地址段:

from netaddr import *

ip = IPNetwork('192.0.2.16/29')
ip_list = list(ip)
print(ip_list)

輸出:[IPAddress('192.0.2.16'), IPAddress('192.0.2.17'), …, IPAddress('192.0.2.22'), IPAddress('192.0.2.23')]

感謝python大法!


發(fā)布手記

熱門詞條