Kiedy próbuję pingować adres IP, 10.10.208.57
nie mam odpowiedzi, ponieważ nic nie istnieje w sieci z tym adresem IP.
Jeśli jednak spróbuję pingować 10.10.208.
0,57
inny adres IP odpowiada:
root@everest:/root# ping 10.10.208.057
PING 10.10.208.057 (10.10.208.47) 56(84) bytes of data.
64 bytes from 10.10.208.47: icmp_seq=1 ttl=253 time=0.732 ms
64 bytes from 10.10.208.47: icmp_seq=2 ttl=253 time=0.695 ms
64 bytes from 10.10.208.47: icmp_seq=3 ttl=253 time=0.659 ms
64 bytes from 10.10.208.47: icmp_seq=4 ttl=253 time=0.705 ms
Biorąc pod uwagę, że 10.10.208.47
jest to drukarka Lexmark E120n, co może być przyczyną tego dziwnego problemu?
Odpowiedzi:
To zachowanie jest w rzeczywistości spowodowane normalną funkcją pingowania i nie ma związku z twoim sprzętem.
Rzeczywiście, prefiksowanie adresu IP (lub jego części) wiodącym zerem spowoduje interpretację liczby jako ósemkowej .
Tak więc
057
środki57
na bazie 8, który jest 47. Zatem ping wysyła ICMP zapytanie do maszyny znajduje się pod adresem10.10.208.47
, a zatem uzyskać odpowiedź od niego.Zauważ, że możesz również pingować adresy w systemie szesnastkowym, używając przedrostka 0x zamiast tylko 0.
Edycja: jak sugeruje wiele komentarzy, ta funkcja w rzeczywistości nie jest specyficzna
ping
i można ją znaleźć w wielu programach CLI manipulujących adresami IP.źródło
Ping, podobnie jak wiele innych programów uniksowych, korzysta z bibliotek C w systemie uniksowym do rozpoznawania nazw. Jedną z używanych funkcji jest
inet_aton
.Strona
inet_aton
podręcznika dla mówi:Kiedy więc używasz wiodącego zera, liczba jest interpretowana jako ósemka. Zatem 57 = 047 = 0x39.
źródło