簡體   English   中英

CIDR子網計算和python ipcalc

[英]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/30192.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM