Background:
Excel列中,有多個net-block, 將這些net-block按照IP地址(v4)自己的大小從小到大排序。
Idea:
IPv4地址的格式是點分十進制的,也就是說每一個點前的數字都有自己相應的power權值,只要找到這個權值,再將IP地址以“."分開,分別乘以其權值,就可以得到某個IP唯一對應的一個反應其真實大小的十進制值。
Solution:
以下面這幾個IP block為例,D2 到 G2是為了去find一個IP網段這種格式中的“.”和“/”,具體的語句,以D2為例就是 = FIND(".",$A2,1),這樣就找到了第一個“.”在A2中的位置,G2是“/”在A2中的位置。有了這幾個位置信息之后,就可以拿來分割IP地址了。
H2到K2 都是為了顯示分割后的IP地址。用到的是MID這個函數,用於返回一個字符串中,特定的位置到特定位置之間的部分。
L1到O1分別是點分十進制分別的每一段的權值。以10.15.101.0為例,最后一段0就是自然是0,所以權值為1,倒數第二段101,權值應該是2的8次方256,以此類推,倒數第三段15的權值是2的16次方65536,倒數第四段10的權值就是2的24次方。
然后把H2到K2中每一段的值,分別乘以其權值,然后相加,就可以得到這個IP唯一對應的一個十進制數值。我把這個唯一值放進了P列,也放到了C列,主要是為了一會兒把它復制出去的時候方便。把它不帶格式的復制之后,按照從小到大排序就可以了。
我這個圖表里不止有這6個數據,整體的效果如下
上邊的這個 In Use和Not In Use 是我為了統計是否IP在用加上去的,大家可以忽略。