歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

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

某日,使用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