在lis中查找子网掩码并将其转换为CIDR

2024-04-28 19:48:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个包含数百个ip地址和掩码的列表,格式如下:

['10.10.10.0/255.255.255.0', '10.10.20.0/255.255.255.192']

我想将此列表转换为以下格式:

^{pr2}$

这是我的代码:

# List already containing all ip/mask (format: 10.10.10.0/255.255.255.0') shown above
print ip_mask_list
#hardcoded mask for testing
netmask = "255.255.248.0"
#convert mask to CIDR
cidr = sum([bin(int(x)).count('1') for x in netmask.split('.')])
print cidr  # prints 21

我可以把一个掩码转换成CIDR,但是我怎么做,而不是传递硬编码的netmask变量,我可以传递ip_mask_list,它遍历所有的掩码并将其转换为CIDR,如上图所示。可能创建下一个列表,其中所有255.x.x.x都转换为/xx。在

谢谢

达蒙


Tags: 代码ip列表for地址格式masklist
2条回答

您可以使用regex:

import re
s = ['10.10.10.0/255.255.255.0', '10.10.20.0/255.255.255.192']
final_ips = ['{}/{}'.format(a, sum([bin(int(x)).count('1') for x in b.split('.')])) for a, b in map(lambda x:re.findall('[\d\.]+', x), s)]

输出:

^{pr2}$

它将原始IP地址拆分为IP和掩码部分。当根据ip_mask中的设置位数来计算cidr_suffix时,IP地址与以前一样使用。在

ips = ['10.10.10.0/255.255.255.0', '10.10.20.0/255.255.255.192']

def append_cidr_suffix(full_ip):
    address_and_mask = full_ip.split('/')
    prefix = address_and_mask[0]
    ip_mask = address_and_mask[1]

    suffix = sum(bin(int(sub_part)).count('1') for sub_part in ip_mask.split('.'))   

    return prefix + '/' + str(suffix)

cidr_ips = [append_cidr_suffix(i) for i in ips]

相关问题 更多 >