Я работаю над изменением приложения Java EE, которое будет аутентифицироваться на основе IP-адреса пользователя с использованием ServletRequest.getRemoteAddr . Мы храним диапазоны IP-адресов (FROM_IP и TO_IP) в базе данных, и система будет аутентифицироваться, только если IP-адрес пользователя попадает в диапазон.
Теперь тестеры отметили, что цифра 0 (ноль) не должна быть разрешена в значениях FROM_IP и TO_IP (в любом месте). Обратите внимание, что это интернет-приложение, и поэтому мы будем получать только публичные IP-адреса.
Правильно ли тестировщики предлагают эту проверку? Почему у нас не может быть нуля в диапазоне значений, таких как 167.23.0.1 - 167.23.255.255?
ip
authentication
ip-address
ipv4
Ritesh
источник
источник
Ответы:
Нет, они абсолютно неверны.
Фактически это действительный IP-адрес:
192.168.24.0
Как есть
167.23.0.1
.Разделение IP-адреса на точечные сегменты является чисто человеческим удобством для отображения. Это намного легче запомнить,
192.168.1.42
чем3232235818
.Для компьютеров важно разделение (маска сети). Недопустимо иметь адрес хоста с разделом хоста адреса, полностью установленным в 0 или 1.
Итак, 192.168.24.0 до тех пор, пока маска сети такова, что некоторые части устанавливаются в части хоста. Смотрите следующие расчеты:
В этом случае в адресной части (справа) установлены 2 бита. Это действительный адрес хоста в подсети 192.168.0.0/16.
В этом случае в адресной части установлено 10 битов и 6 битов не установлено. Это еще один действительный адрес хоста в той же подсети.
В этом случае в адресной части установлены нулевые биты. Это недопустимый адрес хоста в сети 192.168.24.0/24.
источник
ping 2130706432
илиping 017700000001
(да, даже в Windows). Вы можете быть удивлены результатами.192.168.0.257
неверно, но192.168.257
является правильным представлением192.168.1.1
(как есть192.11010305
). Смinet_aton(3)
.Если я не неправильно понял, ваши тестеры совершенно неправы. Действительные IP-адреса могут иметь 0.
источник
В общем: нет, не имеет значения, есть ли в адресе 0 или нет.
Однако в том, что говорят ваши тестеры, есть доля правды. В некоторых случаях старое или сломанное сетевое оборудование не будет правильно работать на адресах с 0 в последних октестах. Это связано со старыми правилами классной маршрутизации. В маршрутизации Classfull вы можете узнать маску сети по первому октету адреса. Если оборудование все еще следует классическим правилам маршрутизации, оно может неправильно обработать адрес, такой как 200.100.1.0/16.
источник
Допустим, вам нужно 510 IP-адресов в одном диапазоне, а ваш сетевой адрес - 192.1.1.0, у вас будет подсеть / 23, из которых один из IP-адресов вашего хоста является IP-адресом .0, ваши тестеры ошибочны, если адрес .0 это адрес хоста. Если у вас есть сеть / 24, было бы правильно сказать, что это неправильно.
источник
Чтобы дать очень простой ответ: один или несколько нулей в IP-адресе идеально подходят для адресов хоста, если эти адреса не являются сетевым или широковещательным адресом.
Сетевые и широковещательные адреса являются действительными IP-адресами, они просто не могут использоваться хостами.
источник