2010-08-19 345 views
52

主機名的有效字符是什麼?這將會像網絡計算機或網絡域一樣。主機名的有效字符?

把它放在上下文中,我正在寫一個連接到遠程服務器的PC遊戲;所以我有一個主機名字段和一個端口字段。很明顯,端口是短程序中的一個數字,但我需要知道所有可能的主機名字符(以及可能需要的任何其他模式 - 主機名是否需要以字母開頭?)。

主機名示例包括localhostgoogle.com

+2

而linux [sethostname](http://linux.die.net/man/2/sethostname)命令提供將接受任何字節。 – OrangeDog 2016-02-16 18:04:48

回答

57

結帳這個wiki,特別是在有效的主機名

主機名是由一系列級聯點標籤中的一樣,都是域名部分限制。例如,「en.wikipedia.org」是一個主機名。每個標籤的長度必須介於1到63個字符之間,並且整個主機名(包括分隔點但不是尾部點)最多有253個ASCII字符。

對於協議的Internet標準(請求註解)要求組件主機名標籤只能包含ASCII字母'a'到'z'(不區分大小寫),數字'0'到'9' ,和連字符(' - ')。 RFC 952中主機名的原始規範要求標籤不能以數字或連字符開頭,並且不得以連字符結尾。但是,隨後的規範(RFC 1123)允許主機名標籤以數字開頭。不允許使用其他符號,標點符號或空格。

+2

確保您清楚您是在查找主機名還是完全限定的域名。 – 2013-12-04 14:57:52

17

這取決於您在IDN toASCII算法之前還是之後處理IDN。 (也就是你看到的域名παράδειγμα.δοκιμήπαράδειγμα.δοκιμήxn--hxajbheg2az3al.xn--jxalpdlp

在後一種情況 - 你在哪裏過的Punycode處理國際化域名,那麼舊的RFC 1123的規則:

ü+ 0041通過U + 005A(AZ),U + 0061到U + 007A(az)的情況相互摺疊,U + 0030到U + 0039(0-9)和U + 002D( - )。[編輯] U + 002E (。)當然;標籤的規則允許其他人在標籤之間插入點,有時它是最容易忘記的明顯位]

如果您以IDN格式看到它,允許的字符多種多樣,請參見http://unicode.org/reports/tr36/idn-chars.html所有有效字符的dy圖表。

機會是你的網絡代碼將處理punycode,但你的顯示代碼(或甚至只是將字符串傳入和傳出其他層)與更人類可讀的形式,因爲沒有人在السعودية上運行服務器。域名希望看到他們的服務器列在.xn上 - mgberp4a5d4ar

+0

哇,我從來沒有見過IDN和Ponycode!目前我只計劃提供英文支持,因爲這只是我的一個寵物項目,但我絕對從你的答案中學到了一些東西! – Ricket 2010-08-19 19:39:30

+1

punycode工作方式的好處在於,低於某個級別(您進行網絡連接的級別),它都是ASCII。這是一種假裝只有ASCII的技術可以與其他文本一起工作的方式(包括以前不允許的一些英文單詞)。除了提供整個詞彙的升級途徑外,它還爲您提供了一個:將其構建爲僅按照RFC 1123的說法進行操作,如果稍後添加IDN支持,則網絡代碼保持不變,並且在頂部添加對RFC 3490的支持(圖書館有很多種語言可以提供幫助)。 – 2010-08-19 20:49:04

+0

@Ricket不知道是否打字錯誤,或者你是否開玩笑說這個名字(「ponycode」)。我個人稱他們爲「被打」。 – 2014-07-08 00:56:13

2

「名稱」(網絡,主機,網關或域名)是一個文本字符串,最多可以從字母表(AZ)數字(0-9),減號( - )和句點(。)。請注意,只有當這些時段用於分隔「域樣式名稱」的組件時才允許使用這些時段。 (有關背景信息,請參閱RFC-921,「域名系統實施時間表」)。作爲名稱的一部分不允許空白或空格字符。大小寫不區分。第一個字符必須是字母字符。最後一個字符不能是減號或句號。作爲GATEWAY的主機應該有「-GATEWAY」或「-GW」作爲其名稱的一部分。不作爲Internet網關的主機不應使用「-GATEWAY」和「-GW」作爲其名稱的一部分。如果是DoD主機,則作爲TAC的主機應該具有「-TAC」作爲其主機名的最後部分。單個字符名稱或暱稱是不允許的。

這在http://support.microsoft.com/kb/149044