Wszyscy nadmiernie komplikują to za pomocą RFC, klas IP i tym podobnych. Wystarczy uruchomić kilka testów, aby zobaczyć, w jaki sposób ping
polecenie analizuje dane wejściowe IP użytkownika (usunięte zewnętrzne plewy):
> ping 1
Pinging 0.0.0.1 with 32 bytes of data:
> ping 1.2
Pinging 1.0.0.2 with 32 bytes of data:
> ping 1.2.3
Pinging 1.2.0.3 with 32 bytes of data:
> ping 1.2.3.4
Pinging 1.2.3.4 with 32 bytes of data:
> ping 1.2.3.4.5
Ping request could not find host 1.2.3.4.5. Please check the name and try again.
> ping 255
Pinging 0.0.0.255 with 32 bytes of data:
> ping 256
Pinging 0.0.1.0 with 32 bytes of data:
Jak widać, ping
polecenie (w systemie Windows) pozwala używać różnych formatów adresów IP. Adres IPv4 można podzielić na cztery części („kropkowane-kwadraty”) w następujący sposób:, A.B.C.D
a ping
polecenie pozwala ci je pominąć, wypełniając następujące wartości domyślne 0
:
1 part (ping A) : 0.0.0.A
2 parts (ping A.B) : A.0.0.B
3 parts (ping A.B.C) : A.B.0.C
4 parts (ping A.B.C.D) : A.B.C.D
Jeśli podasz tylko jedną część, to jeśli jest ona mniejsza niż 255 (maksymalna dla oktetu), jest traktowana jak oktet jak powyżej, ale jeśli jest większa niż 255, to jest konwertowana i przenoszona do następnego pola (tj mod 256
.).
Istnieje kilka przypadków krawędzi, takie jak dostarczanie więcej niż cztery części nie wydają się działać (np pingowanie google.com
„s IP nie będzie działać albo 0.74.125.226.4
albo 74.125.226.4.0
).
Możesz także użyć notacji szesnastkowej zarówno w formie kropkowanej, jak i płaskiej, ale musisz ją sformatować, oczekując 0x
na każdy oktet.
Istnieje wiele sposobów reprezentowania adresu IP (IPv4). Możesz użyć formatu płaskiego lub czterokrotnie z kropką (lub potrójnego z kropkami, podwójnego z kropkami lub nawet pojedynczego z kropkami), a dla każdego z nich możesz użyć (lub nawet mieszać i dopasowywać) dziesiętny, ósemkowy i szesnastkowy. Na przykład możesz pingować google.com
na następujące sposoby:
google.com
(Nazwa domeny)
74.125.226.4
(kropka dziesiętna)
1249763844
(ułamek dziesiętny)
0112.0175.0342.0004
(kropkowany ósemkowy)
011237361004
(płaskie ósemki)
0x4A.0x7D.0xE2.0x04
(kropkowany hex)
0x4A7DE204
(płaski hex)
74.0175.0xe2.4
(ಠ_ಠ)
(Dzięki Bogu, że obsługa notacji binarnych nie została dodana!)
Zastosowanie :
W twoim przypadku ping 192.168.072
używa trzeciego formatu z powyższej tabeli ( A.B.0.C
), więc faktycznie pingujesz 192.168.0.072
. Ponadto, ponieważ w ostatnim fragmencie znajduje się zero wiodące, traktowane jest ono jako ósemkowe, które w systemie dziesiętnym wynosi 58.
Zagadka rozwiązana.
Zauważ, że chociaż ping
polecenie systemu Windows pozwala na tak szeroką gamę formatów wejściowych i interpretuje niestandardowe formaty w widzialny sposób, niekoniecznie oznacza to, że możesz używać takich formatów wszędzie. Niektóre programy mogą wymusić podanie wszystkich czterech części kwadratu kropkowanego, inne mogą nie zezwalać na mieszanie i dopasowywanie liczb dziesiętnych i ósemkowych itd.
Ponadto adresy IPv6 dodatkowo komplikują logikę analizy i akceptację formatu wejściowego.
Dodatek :
syss zwrócił uwagę, że jeśli użyjesz nieprawidłowego znaku w jednej z liczb (np. a 8
lub 9
przy użyciu ósemki, g
w trybie szesnastkowym itp.), to ping
jest wystarczająco inteligentny, aby rozpoznać to i zinterpretować jako ciąg (-al? -ic?) URL zamiast liczbowego adresu IP.
(Jako ktoś, kto miał wiele tętniaków i zawałów serca, próbując napisać rzekomo „prosty” kod, aby pomieścić wykładniczo eksplodującą liczbę permutacji wartości danych, doceniam, że - wydaje się - poprawnie przetwarza wszystkie wariacje wejściowe; w tym przypadek, co najmniej 3 1 +3 2 +3 3 +3 4 = 120 odmian).
Tak więc, podczas określania polecenia 010.020.030.040
ping 8.16.24.32
zgodnie z oczekiwaniami, przekazywanie 010.020.030.080
do ping
będzie traktowane jak adres URL zamiast adresu IP - taki, foo.bar.baz.com
który mógłby (ale niestety nie istnieje). Innymi słowy, próbuje pingować poddomenę 010
w subdomenie 020
w domenie 030
w domenie najwyższego poziomu 080
. Jednak, ponieważ 080
nie jest to prawidłowy TLD (jak .com
, .net
i ich kumple), połączenie nie powiedzie się w prawo na pierwszym etapie.
To samo dzieje się, 090.010.010.010
gdy nieprawidłowy znak znajduje się w innym oktecie. Podobnie 0xf.0xf.0xf.0xf
pinguje 15.15.15.15
, ale 0xh1.0x1.0xg0.0f
zawodzi.
No cóż, myślę, że to właśnie dostajesz za brak biegłości w wielu bazach liczb.
Prawdopodobnie łatwiej i bezpieczniej jest po prostu zawsze używać adresów z 4 kropkami („40q”? „„ Quaddy-quad ”?„ „Cutie-q”?).
Więc idź i poznaj podstawy liczb . Będziesz mógł pochwalić się i być życiem imprez, a jak mówią, istnieje 10 rodzajów ludzi: tych, którzy znają binarny i tych, którzy nie.
Załóżmy nawet nie myśleć o adresach IPv6; Myślę, że to jedna ze 111 pieczęci !!!