正则表达式之⼦⽹掩码mask⼀篇就搞定
正则表达式:
hotpotato
pattern = '^((128|192)|2(24|4[08]|5[245]))(\.(0|(128|192)|2((24)|(4[08])|(5[245])))){3}$'
Python 函数例⼦:
1import re
2def check_mask(mask_str):
3 pattern = '^((128|192)|2(24|4[08]|5[245]))(\.(0|(128|192)|2((24)|(4[08])|(5[245])))){3}$'
4 res = re.match(pattern, mask_str)
5 if not res:
6 return Fal
7 return True
nta
你拷贝过去就完事了,可能不会再刨根问底了。那为什么是这样写?你想过吗?
⼦⽹划分:是通过借⽤IP地址中若⼲位主机地址来充当的⽹络地址,从⽽将原⽹络划分为若⼲⼦⽹。amzn
计算机自考本科>所有美好的东西
拿 C类⼦⽹掩码 举例:
① 划分⼦⽹数 ② ⼦⽹位数 ③⼦⽹掩码(⼆进制) ④ ⼦⽹掩码(⼗进制) ⑤ 每个⼦⽹主机数
① 1~2 ② 1 ③ 11111111.11111111.11111111.10000000 ④ 255.255.255.128 ⑤ 126
① 3~4 ② 2 ③ 11111111.11111111.11111111.11000000 ④ 255.255.255.192 ⑤ 62
① 5~8 ② 3 ③ 11111111.11111111.11111111.11100000 ④ 255.255.255.224 ⑤ 30
① 9~16 ② 4 ③ 11111111.11111111.11111111.11110000 ④ 255.255.255.240 ⑤ 14
① 17~32 ② 5 ③ 11111111.11111111.11111111.11111000 ④ 255.255.255.248 ⑤ 6
① 33~64 ② 6 ③ 11111111.11111111.11111111.11111100 ④ 255.255.255.252 ⑤ 2
借位:从左到右借的,不是从右到左,所以只能是 128,192,224,240,248,252,254,255。
但在这⾥ 254,255 没啥意义,因为每个⼦⽹中,第⼀个IP地址(即主机部分全部为0的IP)和最后⼀个IP(即主机部分全部为1的IP)不能分配给主机使⽤。
bathroom的音标所以 B类⼦⽹掩码 来说,只能是下⾯的⼏个:
255.255.0.0
255.255.128.0
翻译后修饰255.255.192.0
255.255.224 .0
255.255.240.0
255.255.248.0
255.255.252.0
ich255.255.254.0
255.255.255.0
255.255.255.128
255.255.255.192 255.255.255.224 255.255.255.240 255.255.255.248 255.255.255.252 A类⼦⽹掩码:255.0.0.0
255.128.0.0 255.192.0.0 255.224.0.0 255.240.0.0 255.248.0.0 255.252.0.0 255.254.0.0 255.255.0.0 255.255.128.0 255.255.192.0 255.255.224 .0 255.255.240.0 255.255.248.0 255.255.252.0 255.255.254.0 255.255.255.0 255.255.255.128 255.255.255.192 255.255.255.224 255.255.255.240 255.255.255.248 255.255.255.252
CIDR 格式的IP段 输出 字符串格式的⼦⽹掩码:
例如: 192.168.1.1/24 的⼦⽹掩码是 255.255.255.0
1def exchange_maskint(mask_int):
2 bin_arr = ['0' for i in range(32)]
3 for i in range(mask_int):
4 bin_arr[i] = '1'
5 tmpmask = [''.join(bin_arr[i * 8:i * 8 + 8]) for i in range(4)]
2018研究生国家线6 tmpmask = [str(int(tmpstr, 2)) for tmpstr in tmpmask]
bbcnews
7 return '.'.join(tmpmask)
8
9def get_mask(cidr):
10 mask = cidr.split("/")[1]
11 return exchange_maskint(int(mask))
12
13print(get_mask('192.168.1.1/24'))