正则表达式 之 子网掩码mask 一篇就搞定
正则表达式:
pattern = ^((128|192)|2(24|4[08]|5[245]))(.(0|(128|192)|2((24)|(4[08])|(5[245])))){3}$
Python 函数例子:
import re def check_mask(mask_str): pattern = ^((128|192)|2(24|4[08]|5[245]))(.(0|(128|192)|2((24)|(4[08])|(5[245])))){3}$ res = re.match(pattern, mask_str) if not res: return False return True
你拷贝过去就完事了,可能不会再刨根问底了。那为什么是这样写?你想过吗? 正则表达式,见 子网掩码, 见 或者 百度百科 也非常详细
子网划分:是通过借用IP地址中若干位主机地址来充当子网的网络地址,从而将原网络划分为若干子网。 拿 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)不能分配给主机使用。 所以 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 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 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
def exchange_maskint(mask_int): bin_arr = [0 for i in range(32)] for i in range(mask_int): bin_arr[i] = 1 tmpmask = [.join(bin_arr[i * 8:i * 8 + 8]) for i in range(4)] tmpmask = [str(int(tmpstr, 2)) for tmpstr in tmpmask] return ..join(tmpmask) def get_mask(cidr): mask = cidr.split("/")[1] return exchange_maskint(int(mask)) print(get_mask(192.168.1.1/24))