正則表達式 之 子網掩碼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
    

你拷貝過去就完事了,可能不會再刨根問底了。那爲什麼是這樣寫?你想過嗎?

正則表達式,見 https://blog.csdn.net/u012219045/article/details/98599548

子網掩碼, 見 https://blog.csdn.net/u012219045/article/details/60466352 或者 百度百科 也非常詳細 https://baike.baidu.com/item/%E5%AD%90%E7%BD%91%E5%88%92%E5%88%86/5446046?fr=aladdin

子網劃分:是通過借用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

下圖來自百度文檔 https://wenku.baidu.com/view/6632813bee06eff9aff80705.html 

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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章