用python实现子网掩码地址与位长的相互转换

某日,使用centos7,发现网络配置时,子网掩码需要手动转换;因为centos7的网络配置方式为:

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)
时间: 2024-10-26 20:49:29

用python实现子网掩码地址与位长的相互转换的相关文章

python将下载地址转换成迅雷和qq旋风的下载地址

迅雷和qq旋风下载,有加速和离线功能,很方面,我是在网上看到的原始地址和迅雷地址,qq旋风地址的转化原理,然后用python+pyqt写了一个客户端 原理: 迅雷: 迅雷下载地址="thunder://"+Base64编码("AA"+"真实地址"+"ZZ") QQ旋风: qqdl="qqdl://"+Base64编码("真实地址") import re import base64 fro

JAVA随机的32位长的字符串

CommonUtils类依赖的jar包:commons-beanutils.jar.commons-logging.jar uuid()方法 * 返回一个随机的32位长的字符串 * 用途: * 可以用来做id等各种不能重复的变量,数据库表中的主键不能重复的,它就是不重复的! @Test public void testUnid() { String s=CommonUtils.uuid(); System.out.println(s); } 作用:把一个map中的数据封装到javabean中 *

Json.NET特殊处理64位长整型数据

很多ASP.NET项目,尤其是使用了Ajax的项目,常常需要返回JSON格式的数据..NET框架从3.5版本开始提供了JSON的序列化和反序列化工具,不过个人感觉不太好用,后来找了第三方的Newtonsoft.Json来用.再后来,在MVC4中,微软已经默认使用Json.NET(Newtonsoft.Json)来处理JSON数据了. JavaScript数值精度是32位,如果整数数度超过32位,就会被当作浮点数处理.换句话说,如果从服务端生成的JSON,某个值是64位整数,传到前端JavaScr

linux源码分析之位长定义 -- bitsperlong.h

我们知道,在Linux内核中,不同CPU里面,不同CPU的字节序定义不同. 本节年内容主要是讲的是:不同CPU里面,各自的位长定义也是不同. 本次用于分析的 Linux 内核版本为: linux--3.0.0-12. arch/XXX/include/asm/bitsperlong.h:不同CPU(XXX)的位长定义 1)ARM(XXX=arm): #include <asm-generic/bitsperlong.h> (2)PowerPC(XXX=powerpc) #ifndef __AS

python 查找IP地址归属地

#!/usr/bin/env python # -*- coding: utf-8 -*- #查找IP地址归属地 #writer by keery_log #Create time:2013-10-30 #Last update:2013-10-30 #用法: python chk_ip.py www.google.com |python chk_ip.py 8.8.8.8 |python chk_ip.py ip.txt import signal import urllib import j

python源代码下载地址

Python 源代码下载地址 http://ftp.python.org/ftp/python/ http://www.python.org/ftp/python/

表达式位长 对结果的影响

本文是学习魏家明老师的<Verilog 编程艺术>之后所记录的关于表达式的位长对结果的影响的笔记. 在程序中往往必不可免的需要用到简单的计算,简单的如+ - ,复杂的有**(幂运算). 那么有时运算的结果却和理论不符,这是什么原因呢???很可能就是位长的原因. 且看以下几个例子: 1.中间结果因为位长不够而出现丢失: reg [3:0] a; reg [3:0] b; reg [3:0] c; reg [3:0] d; reg [4:0] e; always @(posedge clk ) b

python 将IP地址转换成打包后的32位格式

python 2.7 #!/usr/bin/env python # Python Network Programming Cookbook -- Chapter - 1 # This program requires Python 2.7 or any later version import socket from binascii import hexlify def convert_ip4_address(): for ip_addr in ['127.0.0.1', '192.168.

python之IP地址或IP段处理模块-ipaddr

python处理IP和IP段的模块基本有两个:IPy与ipaddr IPy基本处理8位.16位.24位掩码的网段,其他的网段处理起来就会出现问题. ipaddr是google出的一个模块,很好的可以处理模块IPy不能解决这个问题,所以建议使用模块ipaddr! 模块地址:http://pythonhosted.org/ipaddr/ 使用介绍: Class总共分为:BaseIP.IPv4.IPv6 ipaddr.IPv4Network()    ipv4网段对象建立 ipaddr.IPv6Net