ホスト名が数字で始まることは有効ですか?


45

ホスト名が数字で始まることは有効ですか?例えば8server

RFC 1123を読むと、これは有効なホスト名であるように見えます。ただし、接尾辞がある場合にホスト名が数字でのみ開始できるかどうかはわかりません8server.com

この質問の起源はInternetDomainName.isValid("8server");、Google Guavaライブラリ(Javadoc)で入力を拒否することです。また、Guava Discussグループに特定の質問を投稿しました。


2
例による一種の証拠として、それらは存在します:7dayshop.com
Holloway

3
数字のみのホスト名はどうですか?88888888.cn
小太郎

7
4chan.com数字で始まる有効な(そしてよく知られている)ホスト名です。
IQAndreas 14年

3
9gag.comを忘れるにはどうすればよいですか?:D
ADTC 14年

8
@ IQAndreas、4chan.orgはそれを無効にするのに十分な理由です。(匿名で冗談を言うだけで、私を傷つけないでください。)
ポールルアン14年

回答:


33

RFC 1123は、DNSに置き換えられたホスト名サーバープロトコルRFC 953で説明)のレガシーを指定するRFC 952の制約を緩和します。したがって、これらのRFCごとに完全に数値のホスト名が有効になります。

RFC 1123自体は、IPとホスト名の解析に関する結果について説明しています。

そのような識別区切り文字なしでドット付き10進数を入力できる場合は、ホストドメイン名のセグメントが数字で始まることが許可され、法的に完全に数字である可能性があるため、完全な構文チェックを行う必要があります (セクション6.1を参照)。 2.4)。ただし、有効なホスト名にドット付き10進数形式#。#。#。#を使用することはできません。少なくとも最上位のコンポーネントラベルがアルファベットになるためです。

ただし、実装の問題のため、有効なホスト名を選択するようにRFC 1178ガイドラインで提供されていました。これらの実装の多くは、数値ホスト名を適切に認識せず、場所に関係なく少なくとも1つの非数値文字が含まれるまで、IPであるかのようにそれらを解析しようとします。

また、実装では、RFC 952の他の元の制約が常に尊重されるとは限らないことがわかります。たとえば、ホスト名をマイナス記号またはピリオドで終わらせることができます。

DNSはホスト名のこれらの元の仕様を保持し、アンダースコアのサポートを追加しました(RFC 2782)。

更新コメントで要求されたとおり、文の明確化:ただし、有効なホスト名はドット付き10進数形式#。#。#。#を持つことはできません。少なくとも最上位のコンポーネントラベルがアルファベットになるためです。これは、最上位ドメイン名がアルファベットでなければならないことを意味します。したがって、完全修飾ホスト名をIPv4アドレスと混同することはできません。この考え方は、DNSのRFC 3696によって明確にされ、すべて数字ではないものに変更されました。わずかな違いに注意してください。


7
1980年代に遡る名前の数字を処理できなかった実装に注意してください。RFC 1178は1990年に公開されました。現在、それを処理できないものはすべてバグです。
マイケルハンプトン

@MichaelHampton これらのRFCをまだ尊重しいない実装がいくつあるかは驚くでしょう。Linuxホストのファイル処理から開始します。
ザビエルルーカス14年

11
ハハ、いいえ、私はしません。ほとんどの日は、私がいることによって、行かないはありません RFCで頭の上にいくつかの開発者を倒すために原因を持っています。
マイケルハンプトン

2
@マイケルハンプトン:あなたは私が時々開発者から見たたわごとを信じないでしょう。数週間前、ユーザーがカメラのホスト名を入力できるように、IPカメラでネットワーク設定Webページを作成した人がいました。彼は、自由形式のユーザー入力に対して検証を行いませんでした。ベータテストユーザーが「Room 1.10」と入力すると、カメラはそれをDHCPクライアント識別子として喜んで送信します。Microsoft DHCPおよびDNSサーバーはそれを好まないことを保証できます。それが実稼働ビルドに入る前に気づいた良いこと。私は...時々顧客に介して取得何をするか考えた時のみ、身震いすることができます
Tonny

13

当初、ホスト名は数字やアンダースコア(RFC 952)で始めることはできませんでしたが、前述の新しい仕様RFC 1123では許可されています。

この場合、isValid()の呼び出しに関して、完全なドメイン名をパラメーターで渡す必要があります。 InternetDomainName.isValid("8server.com");


完全なドメイン名を本当にisValidメソッドに渡す必要がありますか?結局、InternetDomainName.isValid("server");trueを返します。
マーク

@Mark OK、それに応じて答えを更新しました
セリーヌ・オースール

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.