[英]CIDR subnet calculation and python ipcalc
我在質疑 Python 的 ipcalc 模塊( ipcalc )的結果(似乎 netaddr 可能是更好的選擇)。
我們以192.168.1.25/30
為例。 在二進制中,最后一個八位字節是00011001 AND 11111100 = 00011000
,所以我得到192.168.1.24
作為網絡 ID 和范圍192.168.1.24 - 192.168.1.27
。
使用 ipcalc,當我指定
subnet = ipcalc.Network('192.168.1.25/30')
for x in subnet: print x
輸出是
192.168.1.25
192.168.1.26
192.168.1.27
192.168.1.28
我不理解這種不一致。 使用 CIDR 表示法時,似乎同時指定192.168.1.24/30
和192.168.1.25/30
(或.26/30
或.27/30
)指的是同一個子網。
那是對的嗎? 這只是 ipcalc 模塊中的一個錯誤嗎?
目前有一個開放的錯誤: No way to resolve IP + Netmask to Network Object
以及討論此事的早期錯誤報告:奇怪的子網計算
但是他們還添加了一個名為network
的函數來從 IP 獲取網絡地址。 從手冊:
>>> localnet = Network('127.128.99.3/8')
>>> print localnet.network()
127.0.0.0
手冊特別指出,構造器Network
應將網絡地址作為其第一個參數,而不是網絡中的任何 IP。 如果你問我,相當令人困惑(特別是因為上面的代碼塊破壞了這個條件)。 我至少會在使用之前閱讀模塊的代碼。
正確的子網是 192.168.1.24/30,所以 ips 192.168.1.24 到 192.168.1.27 成為這個網絡的一部分。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.