在Java中获取主机名的推荐方法

问题:

以下哪个是以Java最佳和最便捷的方式获取当前计算机的主机名?
 Runtime.getRuntime().exec("hostname")
VS
 InetAddress.getLocalHost().getHostName()

回答:

严格来说,别无选择,只能在Unix gethostname(2)上调用hostname(1)或 – 。这是你的电脑的名字。任何尝试通过这样的IP地址确定主机名

InetAddress.getLocalHost().getHostName()

在某些情况下一定会失败:

  • IP地址可能无法解析为任何名称。恶意的DNS设置,糟糕的系统设置或错误的提供程序设置可能是其原因。
  • DNS中的名称可以有许多名为CNAME的别名。这些只能在一个方向正确解决:姓名地址。相反的方向是模糊的。哪一个是“官方”的名字?
  • 主机可以有多个不同的IP地址,每个地址可以有不同的名称。两个常见的情况是:一个以太网端口有几个“逻辑”IP地址,或者计算机有几个以太网端口。可配置是否共享IP或具有不同的IP。这被称为“多宿雾”。
  • DNS中的一个名称可以解析为多个IP地址。并不是所有这些地址都必须位于同一台计算机上! (Usecase:一种简单的负载均衡形式)
  • 我们甚至不开始谈论动态IP地址。

也不要将IP地址的名称与主机名称(主机名)混淆。比喻可能会更清楚:

有一个叫做“伦敦”的大城市(服务器)。在城墙内,很多事情发生。城市有几个门(IP地址)。每个门都有一个名字(“北门”,“河门”,“南安普敦门”…),但门的名字不是城市的名称。也不能用门的名字来推断城市的名称 – “北门”将会吸引一半的大城市,而不仅仅是一个城市。然而,一个陌生人(IP包)沿着河流走去,问一个地方:“我有一个奇怪的地址:”Rivergate,左二,第三宫,你能帮我吗?当地人说:“当然,你在正确的道路上,只需要在半小时内到达你的目的地。”

这几乎说明了我的想法。
好消息是:real主机名不需要。在大多数情况下,任何解析为此主机IP地址的名称都可以。 (陌生人可能会进入北门市,但有帮助的当地人翻译“左二”部分。)
如果剩下的角落,您必须使用此配置设置的definitive源 – 即C函数gethostname(2)。该函数也由程序hostname调用。

 
 
Code问答: http://codewenda.com/topics/python/
Stackoverflow: Recommended way to get hostname in Java

*转载请注明本文链接以及stackoverflow的英文链接

发表评论

电子邮件地址不会被公开。 必填项已用*标注

47 − = 46