Ip

將 IPv4 地址的一部分設置為零是否有效?

  • February 3, 2021

我正在對 Java EE 應用程序進行更改,該應用程序將使用ServletRequest.getRemoteAddr基於使用者的 IP 地址進行身份驗證。我們將 IP 地址範圍(FROM_IP 和 TO_IP)儲存在數據庫中,只有當使用者的 IP 地址在某個範圍內時,系統才會進行身份驗證。

現在,測試人員指出數字 0(零)不應出現在 FROM_IP 和 TO_IP 值中(在任何地方)。請注意,這是一個面向 Internet 的應用程序,因此我們只會獲得公共 IP 地址。

測試人員建議驗證是否正確?為什麼我們不能在 167.23.0.1 - 167.23.255.255 等範圍值中設置零?

不,它們完全不正確。

事實上,這是一個有效的 IP 地址:192.168.24.0

原樣167.23.0.1

將 IP 地址分成虛線段純粹是為了方便顯示。比記住要容易192.168.1.42得多3232235818

對電腦而言重要的是分隔(網路遮罩)。將主機地址的主機部分完全設置為 0 或 1 是無效的。

因此,192.168.24.0 只要網路遮罩在主機部分設置了一些位。請參閱以下計算:


michael@challenger:~$ ipcalc 192.168.24.0/16
Address:   192.168.24.0         11000000.10101000. 00011000.00000000
Netmask:   255.255.0.0 = 16     11111111.11111111. 00000000.00000000
Wildcard:  0.0.255.255          00000000.00000000. 11111111.11111111
=>
Network:   192.168.0.0/16       11000000.10101000. 00000000.00000000
HostMin:   192.168.0.1          11000000.10101000. 00000000.00000001
HostMax:   192.168.255.254      11000000.10101000. 11111111.11111110
Broadcast: 192.168.255.255      11000000.10101000. 11111111.11111111
Hosts/Net: 65534                 Class C, Private Internet

在這種情況下,地址部分(右側)設置了 2 位。這是 192.168.0.0/16 子網中的有效主機地址。


michael@challenger:~$ ipcalc 192.168.24.255/16
Address:   192.168.24.255       11000000.10101000. 00011000.11111111
Netmask:   255.255.0.0 = 16     11111111.11111111. 00000000.00000000
Wildcard:  0.0.255.255          00000000.00000000. 11111111.11111111
=>
Network:   192.168.0.0/16       11000000.10101000. 00000000.00000000
HostMin:   192.168.0.1          11000000.10101000. 00000000.00000001
HostMax:   192.168.255.254      11000000.10101000. 11111111.11111110
Broadcast: 192.168.255.255      11000000.10101000. 11111111.11111111
Hosts/Net: 65534                 Class C, Private Internet

在這種情況下,地址部分設置了 10 位,未設置了 6 位。這是同一子網中的另一個有效主機地址。


michael@challenger:~$ ipcalc 192.168.24.0/24
Address:   192.168.24.0         11000000.10101000.00011000. 00000000
Netmask:   255.255.255.0 = 24   11111111.11111111.11111111. 00000000
Wildcard:  0.0.0.255            00000000.00000000.00000000. 11111111
=>
Network:   192.168.24.0/24      11000000.10101000.00011000. 00000000
HostMin:   192.168.24.1         11000000.10101000.00011000. 00000001
HostMax:   192.168.24.254       11000000.10101000.00011000. 11111110
Broadcast: 192.168.24.255       11000000.10101000.00011000. 11111111
Hosts/Net: 254                   Class C, Private Internet

在這種情況下,地址部分設置了零位。這不是 192.168.24.0/24 網路中的有效主機地址。

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