2010-08-19 338 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