一、IPv4
十进制->二进制
def get_bin_v4(prefix):ip = prefix.split('/')[0]mask = prefix.split('/')[1]bin_all = (''.join([bin(int(x) + 256)[3:] for x in ip.split('.')]))return bin_allprefix_v4 = '192.168.1.0/24'
bin_mask_1 = get_bin_v4(prefix_v4)
print(bin_mask_1)
输出如下:
11000000101010000000000100000000
二进制->十进制
def get_decimal_v4(bin_all):""":param bin_all: str:return:"""decimal_all = ''bin_all = list(bin_all)for i in range(0, len(bin_all)-1, 8): # 0, 1, 2, 3decimal = int(bin_all[i]) * pow(2, 7) + int(bin_all[i+1]) * pow(2, 6) + int(bin_all[i+2]) * pow(2, 5) + int(bin_all[i+3]) * pow(2, 4) + \+ int(bin_all[i+4]) * pow(2, 3) + int(bin_all[i+5]) * pow(2, 2) + int(bin_all[i+6]) * pow(2, 1) + int(bin_all[i+7]) * pow(2, 0)decimal_all += str(decimal)if i!= 24:decimal_all += '.'return decimal_allbin_v4 = '11000000101010000000000100000000'decimal_all = get_decimal_v4(bin_v4)print(decimal_all)
输出如下:
192.168.1.0
二、IPv6
十进制->二进制
def get_bin_v6(prefix):bin_all = ''ip = prefix.split('/')[0]mask = prefix.split('/')[1]part_list = ip.split(':')miss_part = 8 - len(part_list)for part in part_list:if part != '':bin_all += bin(int(part, 16))[2:].zfill(16)else:for i in range(miss_part + 1):bin_all += bin(int('0', 16))[2:].zfill(16)return bin_allprefix_v6 = '2001:1248:43bc::/48'
bin_mask_2 = get_bin_v6(prefix_v6)
print(bin_mask_2)
输出如下:
00100000000000010001001001001000010000111011110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
二进制->十进制
参考IPv4的转化方法。