歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Python實現子網掩碼地址與位長的相互轉換

Python實現子網掩碼地址與位長的相互轉換

日期:2017/3/1 9:05:25   编辑:Linux編程

某日,使用CentOS7,發現網絡配置時,子網掩碼需要手動轉換;因為CentOS 7的網絡配置方式為:

nmcli connection enp4s0 modify ipv4.methord manual ipv4.address "192.168.1.120/24" ipv4.gateway "192.168.1.1" ipv4.dns "223.5.5.5"

其中沒有子網掩碼的配置項。於是,寫一函數,實現子網掩碼和位長的相互轉換。

一:子網掩碼轉化為位長:

# coding:utf-8

def exchange_mask(mask):
# 計算二進制字符串中 '1' 的個數
count_bit = lambda bin_str: len([i for i in bin_str if i=='1'])

# 分割字符串格式的子網掩碼為四段列表
mask_splited = mask.split('.')

# 轉換各段子網掩碼為二進制, 計算十進制
mask_count = [count_bit(bin(int(i))) for i in mask_splited]

return sum(mask_count)

if __name__ == '__main__':
print exchange_mask('255.255.0.0')

二:位長轉化為子網掩碼:

#codint = utf8

def exchange_maskint(mask_int):
bin_arr = ['0' for i in range(32)]
for i in range(mask_int):
bin_arr[i] = '1'
tmpmask = [''.join(bin_arr[i * 8:i * 8 + 8]) for i in range(4)]
tmpmask = [str(int(tmpstr, 2)) for tmpstr in tmpmask]
return '.'.join(tmpmask)

if __name__ == '__main__':
print exchange_maskint(24)

下面關於Python的文章您也可能喜歡,不妨參考下:

《Python核心編程 第二版》.(Wesley J. Chun ).[高清PDF中文版] 下載見 http://www.linuxidc.com/Linux/2013-06/85425.htm

零基礎如何入門Python http://www.linuxidc.com/Linux/2016-10/136485.htm

Ubuntu 14.04安裝Python 3.3.5 http://www.linuxidc.com/Linux/2014-05/101481.htm

CentOS 6.5 腳本自動化裝 Python2.6升級2.7 http://www.linuxidc.com/Linux/2017-02/140406.htm

CentOS上源碼安裝Python3.4 http://www.linuxidc.com/Linux/2015-01/111870.htm

Ubuntu 14.04下Python數據處理環境搭建 http://www.linuxidc.com/Linux/2017-01/139568.htm

Python Paramiko模塊安裝和使用 http://www.linuxidc.com/Linux/2017-01/139973.htm

《Python開發技術詳解》.( 周偉,宗傑).[高清PDF掃描版+隨書視頻+代碼] http://www.linuxidc.com/Linux/2013-11/92693.htm

在CentOS 6.5上安裝Python2.7 http://www.linuxidc.com/Linux/2016-10/136206.htm

Ubuntu 14.04 LTS下編譯安裝Open Babel和Python語言綁定 http://www.linuxidc.com/Linux/2017-01/139569.htm

Python常見數據結構整理 http://www.linuxidc.com/Linux/2017-02/140613.htm

Copyright © Linux教程網 All Rights Reserved