我正在对 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 这样的范围值中设置零?
不使用子网中的第一个地址(即 IP)似乎是一种常见的做法192.168.0.0/24,或者更奇特的例子是172.20.20.64/29.
ipcalc我经常使用的工具遵循相同的做法:
$ ipcalc -n -b 172.20.20.64/29
Address: 172.20.20.64
Netmask: 255.255.255.248 = 29
Wildcard: 0.0.0.7
=>
Network: 172.20.20.64/29
HostMin: 172.20.20.65
HostMax: 172.20.20.70
Broadcast: 172.20.20.71
Hosts/Net: 6 Class B, Private Internet
Run Code Online (Sandbox Code Playgroud)
但为什么HostMin不只是64在这种情况下呢?该64地址是有效的地址,对不对?不管答案是什么,这同样适用于 IPv6 吗?
也许稍微相关:似乎也可以使用 TCP 端口 0 和 UDP 端口 0。这些是否有效或在任何地方使用?
00000001 + 00000001 = 00000011 替代文字 http://locobox.googlepages.com/red_x_round.png
是时候坦白了!......“在某个时候”你认为你知道一些事情,结果它不正确,或者由于对这个主题的误解而不完全正确。
我将从一个非常明显的例子开始(得票最多的项目将排在最前面):
当操作系统找不到分配给网络接口的地址 ( read:rfc3927 )时,只有 169.254.0.0/16 保留给 APIPA 分配。
*****不要误认为“系统管理员犯的错误”