2016-01-20 72 views
0

我正在嘗試構建一個函數,該函數在給定CIDR的情況下返回匹配映射到該CIDR的IP的正則表達式。瞭解IP,CIDR以及IP如何映射到CIDR

例如:

def cidr_to_regex(cidr_input): 
    return ip_matcher 

cidr_to_regex('192.168.100.14/24')的結果應該是相匹配的正則表達式的IP與該CIDR地址相關聯。

這是我如何理解CIDR映射,但我不知道它是正確的。你能幫我弄明白嗎?

調用cidr_to_regex像在實施例應返回匹配192.168.100.x,其中x爲介於0和255

這是因爲/ 24是指1 24位之間的數正則表達式,即前3個字節的地址是1,這意味着我們只關心剩餘的字節。

如果我有cidr_to_regex('192.168.100.14/23')第一23位將是1,所以不關心前2個字節(16個比特),和最後一個字節將是:

1111111011111111,所以224或225.

這意味着我應該匹配192.168.yx其中y是224或225,並且x是0 225.

如果我有cidr_to_regex('192.168.100.14/13')之間和IP的前13位是1,這意味着我不不關心第一個字節,第二個字節的前5位等於1,所以它是這樣的:

首先位:11111111

第二位:11111xyz(因此它可以是11111000,11111001,11111010,等等)

我的表達應該匹配192.zyx,其中z是248之間以及255而X y是介於0和255之間。

我不確定我對CIDR的理解是否正確。你能幫我理解IP如何映射到CIDR嗎?

謝謝!

+0

您似乎正確理解CIDR和VLSM。您的程序是否存在特定的問題或錯誤? – rtpddrummon

+0

我相信我不正確地理解它。我在這裏描述的規則並沒有給出與許多在線cidr計算器相同的結果。另外,我仍然在努力構建一個匹配給定cidr的所有IP的正則表達式。 – RandomGuyqwert

回答

0

我回過頭來看看你的例子,我想你在計算中略有偏差。

讓我們來分解每個例子。

使用192.168.100.14/24,這給了你二進制的以下內容。

11000000.10101000.01100100.00001110 - IP address  192.168.100.14 
11111111.11111111.11111111.00000000 - Subnet mask  255.255.255.0 or /24 
11000000.10101000.01100100.00000000 - Network address 192.168.100.0 
        ^- last common bit 

在此範圍中的地址是192.168.100.0 - 192.168.100.255

使用192.168.100.14/23,那給你二進制以下。

11000000.10101000.01100100.00001110 - IP address  192.168.100.14 
11111111.11111111.11111110.00000000 - Subnet mask  255.255.254.0 or /23 
11000000.10101000.01100100.00000000 - Network address 192.168.100.0 
        ^- last common bit 

因此,在這個範圍內的地址是192.168.100.0 - 192.168.101.255

使用192.168.100.14/13,這讓你在二元以下。

11000000.10101000.01100100.00001110 - IP address  192.168.100.14 
11111111.11111000.00000000.00000000 - Subnet mask  255.248.0.0 or /13 
11000000.10101000.00000000.00000000 - Network address 192.168.0.0 
      ^- last common bit 

因此,在這個範圍內的地址是192.168.0.0 - 192.175.255.255

我希望幫助。