Wcześniej dzisiaj myślałem, że mam adres URL w moim schowku, ale tak naprawdę miałem skopiowane cztery 9-cyfrowe liczby całkowite z arkusza kalkulacyjnego, które były numerami identyfikacyjnymi z zastrzeżonego systemu. Całkowicie niezwiązany z danym zadaniem. Wkleiłem go do Firefoksa i zdziwiłem się, że rzeczywiście załadował stronę. Wcześniej widziałem bez kropkowe zapisy dziesiętne adresów IPv4 , ale ta długa liczba jest czymś znacznie, znacznie większym.
714687644714805209715128610715964400 (przyklej HTTP: // z przodu)
Jak to działa? Wszystkie konwertery dziesiętne -> IPv4, które znalazłem w Internecie, uznają to za nieprawidłowe wejście. Jeśli wezmę adres IPv4, który faktycznie ładuje, i wykonam te same obliczenia, aby przekonwertować go na dziesiętne bez kropki, otrzymam znacznie mniejszą liczbę.
Czytałem, że ping może akceptować dwords i dokonać konwersji, ale nie może przekonwertować tej liczby na adres IP. IPv6 nie wchodzi w rachubę, ponieważ ten host nie ma łączności IPv6.
Co to za szaleństwo? Ogłuszyło mnie i moich współpracowników.
Edycja: Teraz jest online.
Odpowiedzi:
To dość interesujące pytanie i zastanowienie mnie zajęło trochę czasu. Krótka odpowiedź to ostatnie 32 bity liczby to 3660944368 (w systemie dziesiętnym, które można znaleźć przez
714687644714805209715128610715964400 mod 2^32
)Jest to wartość dziesiętna adresu IPv4 218.53.147.240 , którą można znaleźć, konwertując ją na base-256
3660944368 = 218*(256^3)+53*(256^2)+147*(256)+240
analogicznie do wypisywania liczb dziesiętnych (base-10). Na przykład234 = 2*10^2+ 3*10 + 4
.Jak wskazuje @chritohnide, każda sekcja kropkowanych adresów IPv4 jest nazywana oktetem, ponieważ reprezentuje 8 cyfr binarnych. Warto również zauważyć, że różne formaty adresów IPv4 (takie jak dziesiętny z kropkami lub czysty dziesiętny) to po prostu różne sposoby reprezentowania 32-bitowej liczby binarnej dla naszej korzyści.
Ponieważ adresy IPv4 są liczbami 32-bitowymi, do rozstrzygnięcia adresu są używane tylko ostatnie 32-bitowe liczby. Dlaczego to prawda, nie jest tak oczywiste. Jak zauważyli inni, pełna liczba wygląda uderzająco podobnie do adresu IPv6 w systemie dziesiętnym, ale nie jest poprawnym adresem.
Patrząc na specyfikację Teredo (patrz 4. Adresy Teredo ), klient IPv4 zajmuje ostatnie 32 bity adresu IPv6, ale prefiks numeru nie jest zgodny ze specyfikacją Teredo (patrz także wikipedia ).
źródło
0089:a4d2:471b:45ef:77ed:c70f:da35:93f0