Apakah valid untuk nama host yang dimulai dengan angka?


45

Apakah valid untuk nama host yang dimulai dengan angka? misalnya8server

Dari membaca RFC 1123 akan tampak bahwa ini adalah nama host yang valid. Namun, saya tidak jelas apakah nama host hanya dapat dimulai dengan angka ketika ada akhiran misalnya8server.com

Asal usul pertanyaan ini adalah bahwa InternetDomainName.isValid("8server");di perpustakaan Google Guava ( Javadoc ) menolak input. Saya juga memposting pertanyaan spesifik pada grup Diskusi Jambu .


2
Sebagai semacam bukti dengan contoh, mereka memang ada: 7dayshop.com
Holloway

3
Bagaimana dengan hostname digit saja? 88888888.cn
小 太郎

7
4chan.comadalah nama host yang valid (dan terkenal) yang dimulai dengan angka.
IQAndreas

3
Bagaimana Anda bisa melupakan 9gag.com ? : D
ADTC

8
@IQAndreas, 4chan.org adalah alasan yang cukup baik untuk membuatnya tidak valid . (Hanya bercanda tanpa nama, jangan sakiti saya.)
Paul Ruane

Jawaban:


33

RFC 1123 melonggarkan kendala RFC 952 yang menentukan warisan dari Hostname Server Protocol (dijelaskan dalam RFC 953 ) digantikan oleh DNS. Jadi nama host numerik sepenuhnya akan valid per RFC ini.

RFC 1123 sendiri membahas konsekuensi dalam hal penguraian IP versus hostname:

Jika angka desimal bertitik dapat dimasukkan tanpa pembatas pengidentifikasi seperti itu, maka pemeriksaan sintaksis lengkap harus dilakukan, karena segmen nama domain host sekarang diperbolehkan untuk memulai dengan digit dan secara hukum dapat seluruhnya numerik (lihat Bagian 6.1. 2.4). Namun, nama host yang valid tidak akan pernah memiliki bentuk desimal bertitik #. #. #. #, # Karena setidaknya label komponen level tertinggi adalah alfabet.

Namun, itu diberikan dalam pedoman RFC 1178 untuk memilih nama host yang valid karena masalah implementasi. Banyak dari implementasi ini tidak mengenali nama host numerik dengan baik dan mencoba untuk menguraikannya seolah-olah mereka IP sampai mengandung setidaknya satu karakter non-numerik di mana pun lokasinya.

Juga, Anda akan menemukan bahwa implementasi tidak selalu menghormati batasan asli RFC 952 lainnya, yang memungkinkan misalnya nama host diakhiri dengan tanda minus atau titik.

DNS mempertahankan spesifikasi asli ini untuk nama host dan menambahkan dukungan untuk garis bawah ( RFC 2782 ).

Pembaruan Seperti yang diminta dalam komentar, klarifikasi untuk kalimat: Namun, nama host yang valid tidak akan pernah memiliki bentuk desimal bertitik #. #. #. #, Karena setidaknya label komponen tingkat tertinggi akan alfabet . Ini berarti nama domain tingkat atas harus alfabet , sehingga nama host yang memenuhi syarat tidak pernah dapat disamakan dengan alamat IPv4. Gagasan ini telah diklarifikasi oleh RFC 3696 untuk DNS dan diubah menjadi tidak semua-numerik . Perhatikan perbedaannya.


7
Perlu diingat bahwa implementasi yang tidak dapat menangani angka dalam nama tanggal kembali ke tahun 1980-an; RFC 1178 diterbitkan pada tahun 1990. Apa pun yang tidak dapat menanganinya sekarang hanyalah buggy.
Michael Hampton

@MichaelHampton Anda akan terkejut dengan berapa banyak implementasi yang masih tidak menghormati RFC ini. Mulai dari penanganan file host linux Anda.
Xavier Lucas

11
Haha, tidak, saya tidak akan. Hampir tidak ada hari berlalu yang saya tidak punya alasan untuk mengalahkan beberapa pengembang di atas kepala dengan RFC.
Michael Hampton

2
@Michael Hampton: Anda tidak akan mempercayai omong kosong yang sering saya lihat dari para devs. Beberapa minggu yang lalu saya punya satu yang telah membuat halaman web konfigurasi jaringan di ip-kamera sehingga pengguna dapat memasukkan nama host untuk kamera. Dia tidak melakukan validasi APA PUN pada input pengguna format bebas. Pengguna uji beta memasuki "Ruang 1.10" dan kamera dengan senang hati mengirimkannya sebagai pengidentifikasi klien DHCP. Saya dapat meyakinkan Anda bahwa Microsoft DHCP dan server DNS tidak menyukainya. Untung saya perhatikan sebelumnya yang masuk ke membangun produksi. Saya hanya bisa bergidik memikirkan apa yang terkadang sampai ke pelanggan ...
Tonny

13

Awalnya nama host tidak dapat dimulai dengan angka atau garis bawah ( RFC 952 ) tetapi spesifikasi baru RFC 1123, seperti yang Anda sebutkan, memungkinkannya.

Mengenai panggilan ke isValid (), dalam hal ini, nama domain lengkap harus diberikan dalam parameter: InternetDomainName.isValid("8server.com");


Haruskah nama domain lengkap benar-benar perlu diteruskan ke metode isValid? Setelah semua InternetDomainName.isValid("server");mengembalikan true.
Tandai

@ Mark OK, saya memperbarui jawaban yang sesuai
Céline Aussourd

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.