Ip
查找帶有子網遮罩的 IP 地址塊的第一個和最後一個地址
我不確定這是否是提出這個問題的正確地點,但我認為這是最適合提出網路問題的 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