Rit*_*esh 36 ip authentication ip-address ipv4
我正在对 Java EE 应用程序进行更改,该应用程序将使用ServletRequest.getRemoteAddr根据用户的 IP 地址进行身份验证。我们将 IP 地址范围(FROM_IP 和 TO_IP)存储在数据库中,只有当用户的 IP 地址在一个范围内时,系统才会进行身份验证。
现在,测试人员指出在 FROM_IP 和 TO_IP 值中(在任何地方)都不应该允许数字 0(零)。请注意,这是一个面向 Internet 的应用程序,因此我们将仅获取公共 IP 地址。
测试人员建议进行验证是否正确?为什么我们不能在 167.23.0.1 - 167.23.255.255 这样的范围值中设置零?
Mik*_*eyB 73
不,他们完全不正确。
事实上,这是一个有效的 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
Run Code Online (Sandbox Code Playgroud)
在这种情况下,地址部分(右侧)设置了 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
Run Code Online (Sandbox Code Playgroud)
在这种情况下,地址部分有 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
Run Code Online (Sandbox Code Playgroud)
在这种情况下,地址部分设置了零位。这不是 192.168.24.0/24 网络中的有效主机地址。
peh*_*hrs 13
一般情况:不,地址中是否有 0 无关紧要。
但是,您的测试人员所说的有一定道理。在某些情况下,旧的或损坏的网络设备将无法在最后一个八位字节中为 0 的地址上正常工作。这是由于旧的全类路由规则。在 Classfull 路由中,您可以从地址的第一个八位字节告诉网络掩码。如果设备仍然遵循全类路由规则,它可能会错误地处理像 200.100.1.0/16 这样的地址。
归档时间: |
|
查看次数: |
12516 次 |
最近记录: |