簡體   English   中英

在列表中查找子網掩碼並將其轉換為CIDR

[英]Finding and converting subnet mask to CIDR in a list

我有一個列表,其中包含數百種這種格式的IP地址和掩碼:

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

我想將此列表轉換為以下格式:

['10.10.10.0/24', '10.10.20.0/26']

這是我的代碼:

# 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 ,它將ip_mask_list所有掩碼並將其轉換為CIDR,如上所示。 也許創建一個下一個列表,其中所有255.xxx都將轉換為/xx

謝謝

達蒙

您可以使用正則表達式:

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)]

輸出:

['10.10.10.0/24', '10.10.20.0/26']

這將原始IP地址分為一個IP和一個掩碼部分。 像以前一樣使用IP地址,而cidr_suffix是根據cidr_suffix中設置的位數ip_mask

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]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM