Ping alamat IP merespons dengan IP yang berbeda

21

Ketika saya mencoba untuk melakukan ping ke alamat IP 10.10.208.57saya tidak memiliki respons karena tidak ada yang ada di jaringan dengan alamat IP itu.

Namun jika saya mencoba melakukan ping 10.10.208.057 sebagai gantinya alamat IP lain merespons:

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

Mengingat itu 10.10.208.47adalah printer Lexmark E120n apa yang bisa menjadi asal dari masalah aneh ini?

PsyStyle
sumber
3
Bump, lihat jawaban di utas ini: superuser.com/questions/486788/…
Michal Sokolowski

Jawaban:

43

Perilaku itu sebenarnya disebabkan oleh fitur ping yang normal dan tidak ada hubungannya dengan perangkat keras Anda yang sebenarnya.

Memang, awalan alamat IP (atau bagian dari itu) dengan nol di depan akan menyebabkan angka ditafsirkan sebagai oktal .

Jadi 057artinya 57dalam basis 8 yang adalah 47. Dengan demikian ping akan mengirimkan permintaan ICMP ke mesin yang terletak di alamat 10.10.208.47dan karenanya mendapatkan jawaban darinya.

Perhatikan bahwa Anda juga dapat melakukan ping alamat dalam heksadesimal, dengan menggunakan awalan 0x alih-alih hanya 0.

Sunting: Seperti banyak komentar sarankan, fitur ini sebenarnya tidak spesifik untuk pingdan dapat ditemukan di banyak perangkat lunak CLI memanipulasi alamat IP.

eltrai
sumber
Wah! Terima kasih! Hati saya berhenti selama beberapa menit :-)
PsyStyle
4
Bukan hanya ping. Banyak hal melakukan itu.
Jenny D mengatakan Reinstate Monica
1
Bash memperlakukan semua "bilangan bulat" seperti itu askubuntu.com/questions/621500/…
Tim
15

Ping, seperti banyak program unix lainnya, menggunakan perpustakaan C pada sistem unix Anda untuk resolusi nama. Salah satu fungsi yang digunakan adalahinet_aton .

Halaman manual untuk inet_atonmengatakan:

Semua angka diberikan sebagai `` bagian '' dalam `. ' notasi dapat berupa desimal, oktal, atau heksadesimal, sebagaimana ditentukan dalam bahasa C (yaitu, 0x atau 0X terdepan berarti heksadesimal; jika tidak, awalan 0 menyiratkan oktal; jika tidak, angka tersebut ditafsirkan sebagai desimal).

Jadi, ketika Anda menggunakan nol di depan, angka tersebut ditafsirkan sebagai oktal. Dengan demikian, 57 = 047 = 0x39.

Jenny D kata Reinstate Monica
sumber
Saya perhatikan bahkan Windows berperilaku sama. Terima kasih atas jawaban terinci Anda!
PsyStyle
@PsyStyle Sama-sama! Ini adalah notasi standar untuk angka, melintasi spektrum yang luas dari sistem operasi dan bahasa pemrograman.
Jenny D mengatakan Reinstate Monica
"Jadi ketika Anda menggunakan nol di depan, angka tersebut ditafsirkan sebagai desimal." Saya pikir ini salah ketik, maksud Anda diartikan sebagai oktal kan?
Cruncher
1
Terima kasih @Cruncher. Saya menyalahkan konsentrasi darah terlalu tinggi dalam aliran kafein saya.
Jenny D berkata Reinstate Monica