Semua orang terlalu rumit dengan RFC, kelas IP, dan semacamnya. Cukup jalankan beberapa tes untuk melihat bagaimana ping
perintah mem-parsing input IP oleh pengguna (chaff asing) dihapus:
> 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:
Seperti yang Anda lihat, ping
perintah (di Windows) memungkinkan Anda untuk menggunakan berbagai format alamat IP. Alamat IPv4 dapat dipecah menjadi empat bagian ("dotted-quad") seperti itu:, A.B.C.D
dan ping
perintah ini memungkinkan Anda untuk mengabaikan beberapa hal, mengisi default 0
sebagai berikut:
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
Jika Anda hanya memasok satu bagian, maka jika di bawah 255 (maksimum untuk satu oktet), itu diperlakukan seperti oktet seperti di atas, tetapi jika lebih besar dari 255, maka itu dikonversi dan berguling ke bidang berikutnya (yaitu, mod 256
).
Ada beberapa kasus tepi seperti menyediakan lebih dari empat bagian sepertinya tidak berfungsi (misalnya, ping ping google.com
tidak akan berfungsi untuk salah satu 0.74.125.226.4
atau 74.125.226.4.0
).
Anda juga dapat menggunakan notasi heksadesimal dalam bentuk titik-kuad dan datar, tetapi harus memformatnya dengan pra-pending 0x
untuk setiap oktet.
Jadi, ada banyak cara untuk mewakili alamat IP (IPv4). Anda dapat menggunakan format datar atau titik-titik (atau titik-tiga, titik-ganda, atau bahkan titik-tunggal), dan untuk masing-masing, Anda dapat menggunakan (atau bahkan mencampur dan mencocokkan) desimal, oktal, dan heksadesimal. Misalnya, Anda dapat melakukan ping google.com
dengan cara berikut:
google.com
(nama domain)
74.125.226.4
(desimal bertitik)
1249763844
(desimal datar)
0112.0175.0342.0004
(bertitik oktal)
011237361004
(oktal datar)
0x4A.0x7D.0xE2.0x04
(hex putus-putus)
0x4A7DE204
(hex datar)
74.0175.0xe2.4
(ಠ_ಠ)
(Syukurlah, dukungan notasi biner tidak ditambahkan!)
Aplikasi :
Dalam kasus Anda, ping 192.168.072
menggunakan format ketiga pada tabel di atas ( A.B.0.C
), jadi Anda sebenarnya melakukan ping 192.168.0.072
. Selanjutnya, karena Anda memiliki nol di depan pada bagian terakhir, itu diperlakukan sebagai oktal, yang dalam desimal adalah 58.
Misteri terpecahkan.
Perhatikan, bahwa meskipun ping
perintah Windows memungkinkan beragam format untuk input dan menginterpretasikan format non-standar dengan cara yang terlihat, itu tidak berarti Anda dapat menggunakan format seperti itu di mana-mana. Beberapa program mungkin memaksa Anda untuk memberikan keempat bagian quad-putus-putus, yang lain mungkin tidak memungkinkan pencampuran dan pencocokan desimal dan oktal, dan sebagainya.
Selain itu, alamat IPv6 semakin mempersulit logika parsing dan penerimaan format input.
Adendum :
syss menunjukkan bahwa jika Anda menggunakan karakter yang tidak valid di salah satu angka (misalnya, 8
atau 9
ketika menggunakan oktal, g
dalam mode hex, dll) maka ping
cukup pintar untuk mengenali itu dan menafsirkannya sebagai string (-al? -ic?) URL bukan sebagai alamat IP numerik.
(Sebagai seseorang yang memiliki banyak aneurisma dan serangan jantung yang mencoba menulis kode yang seharusnya "sederhana" untuk mengakomodasi jumlah permutasi nilai data yang meledak secara eksponensial, saya menghargai itu - tampaknya - memproses dengan benar semua variasi input; dalam hal ini huruf, setidaknya 3 1 +3 2 +3 3 +3 4 = 120 variasi.)
Jadi, ketika menentukan 010.020.030.040
akan melakukan ping 8.16.24.32
seperti yang diharapkan, meneruskan 010.020.030.080
ke ping
akan diperlakukan seperti URL alih-alih alamat IP — seperti foo.bar.baz.com
yang bisa (tapi sayangnya tidak) ada. Dengan kata lain, itu mencoba untuk melakukan ping subdomain 010
pada subdomain 020
pada domain 030
di domain tingkat atas 080
. Namun, karena 080
bukan TLD valid (seperti .com
, .net
, dan teman-teman mereka), sambungan gagal tepat pada langkah pertama.
Hal yang sama terjadi dengan di 090.010.010.010
mana karakter yang tidak valid dalam oktet berbeda. Demikian juga 0xf.0xf.0xf.0xf
ping 15.15.15.15
, tetapi 0xh1.0x1.0xg0.0f
gagal.
Oh well, saya kira itulah yang Anda dapatkan karena tidak lancar dalam berbagai basis angka.
Mungkin lebih mudah dan lebih aman untuk memastikan untuk selalu menggunakan alamat 4-dotted-quad ("40q"? "Quaddy-quad"? "Cutie-q"?).
Jadi pergilah dan pelajari beberapa basis angka . Anda akan dapat pamer di dan menjadi kehidupan pesta, dan seperti yang mereka katakan, ada 10 jenis orang: mereka yang tahu biner dan mereka yang tidak.
Mari kita bahkan tidak memikirkan alamat IPv6; Saya pikir mereka adalah salah satu dari 111 segel !!!