在Java中获取FQDN

时间:2011-09-01 11:12:22

标签: java windows fqdn inetaddress

我正在尝试使用Java代码获取我域中Windows机器的FQDN。

我尝试了InetAddress.getByName("machine-1").getCanonicalHostName(),但只返回了机器名称。

另一方面,如果我ping“machine-1”,我会得到完整的域名。

你知道怎么做吗?

3 个答案:

答案 0 :(得分:2)

简单的答案是,如果可以的话,你建议的是什么。

API确实声明如果可以,它将返回FQDN。这取决于系统配置。

您发布的代码在Windows域机器上对我有用,但我不能说为什么它不适合您。

如果您无法更改机器/域配置以便java可以获取它,并且您的代码必须使用该FQDN,您可以求助于从java执行ping命令并至少解析结果作为临时措施。

答案 1 :(得分:0)

超级迟到的回复,也许它会帮助下一位旅行者。

InetAddress.getLocalHost().getCanonicalHostName() 

这将返回FQDN - 我的JVM版本是1.8.0_144

我发现了这个JDK错误报告http://bugs.java.com/view_bug.do?bug_id=7166687,这可能解释了为什么会有这么多混乱。

InetAddress.getLocalHost().getHostName()

现在只返回主机名。

答案 2 :(得分:0)

另一个较晚的答复,但我今天也需要此答复,而呼叫getCanonicalHostName的答复对我来说太慢了,它似乎需要DNS查找。

如果您不介意使用JNA(在我的项目中已经需要它),它将为您快速完成(仅适用于Windows):

int format = WinBase.COMPUTER_NAME_FORMAT.ComputerNameDnsFullyQualified;
char buffer[] = new char[256];
IntByReference lpnSize = new IntByReference(0);
lpnSize.setValue(buffer.length);
boolean success = Kernel32.INSTANCE.GetComputerNameEx(format, buffer, lpnSize);

if (success) {
    System.out.println(Native.toString(buffer));
}