Unix中主机名的最大字符数是多少?

Com*_*org 50 c unix hostname max

我想知道Unix系统中主机名的最大字符数是多少.另外,是否有任何可以在Unix编程中使用的定义变量来调用该数字?(即主机名允许的字符数).

我在C编程

Mic*_*ael 64

你通常可以输入:

getconf HOST_NAME_MAX
Run Code Online (Sandbox Code Playgroud)

此外,您通常可以在应用程序中包含limits.h并读取define的值.

虽然POSIX标准表示保证不超过255个字节,但这并不一定意味着每个实现都会遵循这一点.

在您的平台上使用gethostname获取更多详细信息.


Ale*_*puy 50

tl;博士:

代码应该处理长达255个字节的主机名; 管理员应将主机名长度(不包括域)保持在19个字节内,并将域名长度(不包括主机名)保存在23个字节内.

  • 主机名可以长达255个字节(某些系统可能会将它们限制为64个)
  • DNS中使用的主机名可以长达253个字节作为完全限定的域名(FQDN = host.example.com),在这种情况下:
    • 第一个DNS标签(.从主机名中删除及其后的任何内容)最多只能为63个字节
    • 253字节限制适用于整个 FQDN,即使只有第一个标签用于Unix主机名
  • 电子邮件地址中使用的主机名不应超过245个字节(对于传统的8个字符的用户名限制)或221个字节(现代最大用户名长度为32个)作为完全限定的域名
  • 用于服务器TLS/SSL证书的主机名不应超过64个字节作为完全限定的域名
  • 用于OpenSSL生成的证书中的电子邮件地址的主机名不应超过31个字节(对于传统的8个字符的用户名限制)作为完全限定的域名(超过8的用户名减少此限制)
  • 如果主机名中有非ASCII字符,则 对于来自所有上述限制的每个非ASCII域标签(字符之间的部分)减去4.,并减去额外的1-2个字节(不包括1-2的UTF-8编码开销)每个非ASCII字符的每个字符的字节数更多.

长版:

正如@Michael所说,POSIX主机名通常限制为255个字节,正如@zrvan指出的那样,DNS限制了RFC 1035中每个标签的长度- 但是,该限制实际上是63(在RFC 1035第2.3.1节和在RFC 2181第11节中阐明.

当您使用将在DNS中使用的主机名作为SSL证书或电子邮件地址中的主机名时,还有其他限制可以发挥作用.

首先,在DNS协议中表示为完全限定的域名(FQDN)长度限制为255个八位字节

"一系列标签,...由长度为零的标签终止....标签由一个长度八位字节组成,后跟表示名称本身的八位字节数" - MSDN Blog"The Old New Thing"(引用RFC 1035,有用的插图)

使用这些长度前缀(包括最终长度为零的标签),完全限定域名的实际限制为253个字节.

如果您的主机名也将用作您需要TLS/SSL证书的服务器的DNS名称,则会有一个更短的限制对您产生影响. RFC 5280的附录A.1及其前身RFC 3280和2459为X.509证书的不同字段指定了上限; ub-common-name-length公共名称字段的限制是64字节,服务器证书是服务器的完全限定域名.

如果使用OpenSSL生成的SSL证书的电子邮件地址字段长度超过40个字节,则会看到以下错误:

字符串太长,需要小于40个字节长

如果主机名将用于OpenSSL生成的证书的电子邮件地址,则@用户名也需要在40个字节内(错误中的"小于"应该"不超过"),这对于最大用户名长度为8个字节,表示最大主机名FQDN长度为31个字节.如果最大用户名长度超过8个字节,则相应减少最大主机名长度 - 现代Linux限制为32将使最大FQDN长度为7,这是不切实际的,即使对于像bit.ly这样的URL缩短服务也是如此.

可选择40的OpenSSL选项作为电子邮件地址X.509主题备用名称的长度限制,以便与最短的备用名称语法E.163-4(对于电话号码)兼容,并且它是可能TLS/SSL实现(可能甚至包括OpenSSL)支持使用具有更长电子邮件地址的证书.ub-emailaddress-length在RFC 3280中有一个128字节的单独上限(),在RFC 5280中增加到255字节; 这实际上是另一个,在X.509证书中传统嵌入电子邮件地址,但如果许多实现也使用rfc822Address电子邮件IA5Strings的上限,也就不足为奇了.

虽然OpenSSL将来可能会增加这个限制,但OpenSSL请求跟踪器中没有这个问题,而且似乎不太可能改变.

即使您不使用TLS/SSL,最大电子邮件地址长度254意味着传统的8字节用户名限制的最大主机名FQDN长度为245字节; 或221字节,现代最大用户名长度限制为32.

取所有这些最大值和2012年中位数.com域长度为11的最小值(巧合地是example.com的确切长度),并且对于40字节的电子邮件地址,您获得最大的第一个标签主机名长度为19个字节 useruser@REALLY-GETTING-LONG.example.com.

如果所有电子邮件地址都映射到具有MX记录和MTA地址重写的顶级域名,假设更合理的用户名/别名长度限制为16,则40字节的最大域名长度为23字节电子邮件地址就像useruseruseruser@NOT-SO-LONG.EXAMPLE.COM.

最后,非ASCII主机名需要IDN(国际化域名)编码才能与DNS一起使用; 这涉及xn--每个带有非ASCII字符的域标签使用4个字符前缀的编码,以及每个非ASCII字符的扩展1-2个字节(除了UTF-8编码产生的更大的大小).如果您的主机名具有非ASCII字符,则需要相应地减少所有上述限制.


zrv*_*van 18

根据RFC 1035,FQDN的长度限制为255个字符,并且每个标签(由主机名中的点分隔的节点)限制为63个字符,因此实际上您所使用的限制为63.

您可以通过getconf HOST_NAME_MAX在终端中运行来获取此值.


一二三*_*一二三 12

主机名通常限制为255个字节.HOST_NAME_MAX(或_POSIX_HOST_NAME_MAX)定义<limits.h>将包含特定值.

  • 它们仅限于此,但这并不意味着每个实现都会设置它的限制.您仍然需要查看HOST_NAME_MAX定义中的定义方式.例如在我的FreeBSD机器上,它是255,但在我的linux主机上:getconf HOST_NAME_MAX 64 (4认同)