Ip
將 IPv4 地址的一部分設置為零是否有效?
我正在對 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 網路中的有效主機地址。