[英]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.