将部分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?

最佳答案
不,他们是完全错误的.

实际上,这是一个有效的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网络中的有效主机地址.

转载注明原文:将部分IPv4地址设置为零是否有效? - 代码日志