Ip

查找帶有子網遮罩的 IP 地址塊的第一個和最後一個地址

  • March 9, 2015

我不確定這是否是提出這個問題的正確地點,但我認為這是最適合提出網路問題的 SE 網站之一。請將其移至其他更合適的網站。謝謝。

所以假設我有一個 IPv4 地址塊,其中一個主機地址是 182.44.82.16/26。我可以找到這個地址塊的第一個和最後一個地址嗎?

我在想:

182.44.82.16是16182.44.82.(0001 0000)(0001 0000)二進制數。

由於面具是/26,我想我可以這樣做:

IP:   182.44.82.(0001 0000)
Mask: 182.44.82.(1111 1000)

這意味著我只留下了 IP 地址的最後 3 位,這使得第一個地址將是 182.44.82.16,最後一個地址是 182.44.82.23。但這看起來不太對勁。如何計算此地址塊的第一個和最後一個地址?

/26 表示子網的 26 位。在每字節 8 位的情況下,前三個字節為 24,最後一個字節為 2。這意味著您的最後一個字節將採用 (nnhh hhhh) 形式,其中 n 是子網位和 ha 主機位。16 確實是 (0001 0000),所以你得到 (00xx xxxx)。

因此網路地址是 (00|00 0000) -> .0,廣播是 (00|11 1111) -> .63,第一個和最後一個可用地址是 .1 和 .62。

IPv4 地址是 32 位無符號 INT。

由於地址和網路遮罩都可以表示為 32 位無符號 INT,並且它們密切相關,因此這很容易:

first = (addr && netmask)
last = (addr && netmask) + !netmask

引用自:https://serverfault.com/questions/327777