Pracuję nad zmianą w aplikacji Java EE, która uwierzytelniałaby się na podstawie adresu IP użytkownika przy użyciu ServletRequest.getRemoteAddr . Przechowujemy zakresy adresów IP (FROM_IP i TO_IP) w bazie danych, a system uwierzytelniałby się tylko wtedy, gdy adres IP użytkownika mieści się w zakresie.
Teraz testerzy zauważyli, że cyfra 0 (zero) nie powinna być dozwolona w wartościach FROM_IP i TO_IP (w żadnym miejscu). Pamiętaj, że jest to aplikacja internetowa, dlatego otrzymamy tylko publiczne adresy IP.
Czy testerzy mają rację, sugerując tę walidację? Dlaczego nie możemy mieć zera w wartości zakresu, takiej jak 167.23.0.1 - 167.23.255.255?
ip
authentication
ip-address
ipv4
Rytuał
źródło
źródło
Odpowiedzi:
Nie, są całkowicie niepoprawne.
W rzeczywistości jest to prawidłowy adres IP:
192.168.24.0
Jak jest
167.23.0.1
.Rozdzielenie adresu IP na segmenty kropkowane to czysto ludzka wygoda wyświetlania. O wiele łatwiej jest zapamiętać
192.168.1.42
niż3232235818
.Dla komputerów liczy się separacja (maska sieci). Niepoprawne jest posiadanie adresu hosta z sekcją hosta adresu ustawioną całkowicie na 0 lub 1.
Tak więc 192.168.24.0, o ile maska sieci jest taka, że niektóre bity są ustawione w części hosta. Zobacz następujące obliczenia:
W tym przypadku część adresowa (prawa strona) ma ustawione 2 bity. To jest prawidłowy adres hosta w podsieci 192.168.0.0/16.
W tym przypadku część adresowa ma 10 bitów ustawionych i 6 bitów nieustawionych. To kolejny prawidłowy adres hosta w tej samej podsieci.
W tym przypadku część adresowa ma ustawione bity zerowe. To nie jest prawidłowy adres hosta w sieci 192.168.24.0/24.
źródło
ping 2130706432
lubping 017700000001
(tak, nawet w systemie Windows). Wyniki mogą Cię zaskoczyć.192.168.0.257
jest niepoprawny, ale192.168.257
jest poprawną reprezentacją192.168.1.1
(jak jest192.11010305
). Zobaczyćinet_aton(3)
.O ile się nie mylę, twoi testerzy są w błędzie. Prawidłowe adresy IP mogą mieć z pewnością 0.
źródło
Ogólnie: Nie, nie ma znaczenia, czy w adresie jest 0, czy nie.
Jednak w twoich testerach jest ziarno prawdy. W niektórych przypadkach stary lub uszkodzony sprzęt sieciowy nie będzie działał poprawnie na adresach z 0 w ostatnich oktetach. Wynika to ze starych klasowych reguł routingu. W routingu Classfull możesz odróżnić maskę sieci od pierwszego oktetu adresu. Jeśli sprzęt nadal przestrzega klasowych reguł routingu, prawdopodobnie nieprawidłowo obsługuje adres taki jak 200.100.1.0/16.
źródło
Załóżmy, że potrzebujesz 510 adresów IP w jednym zakresie, a twój adres sieciowy to 192.1.1.0, miałbyś podsieć / 23, z których jeden z adresów IP twojego hosta to adres IP .0, testerzy mylą się, jeśli adres .0 to adres hosta. Jeśli masz sieć / 24, słusznie byłoby powiedzieć, że to źle.
źródło
Aby udzielić bardzo prostej odpowiedzi: jedno lub więcej zer w adresie IP jest doskonale poprawnych dla adresów hostów, o ile adresy te nie są adresami sieci ani rozgłaszania.
Adresy sieciowe i rozgłoszeniowe są prawidłowymi adresami IP, po prostu nie są używane przez hosty.
źródło