在Java中获取FQDN

7
我正在尝试使用Java代码获取域中Windows机器的FQDN。
我已经尝试了InetAddress.getByName("machine-1").getCanonicalHostName(),但只返回机器名称。
另一方面,如果我ping "machine-1",我会得到完整的域名。
您知道如何做吗?

我在想,如果你在Windows的etc/hosts中设置了一个条目,你的代码是否能够工作? - Cratylus
3个回答

2
简单的回答是,如果可以的话,你所建议的方法是可行的。
API确实声明了它会返回FQDN(全限定域名),但这取决于系统配置。
你发布的代码在我使用的Windows域机器上是有效的,但我不能说为什么它对你不起作用。
如果您无法更改机器/域配置以便Java可以获取它,并且您的代码需要使用该FQDN,则可以采用从Java执行ping命令并解析结果作为临时措施。

1

很抱歉回复晚了,也许这能帮助下一个旅行者。

InetAddress.getLocalHost().getCanonicalHostName() 

这将返回完全限定域名 - 我的JVM版本是1.8.0_144。
我发现了这个JDK错误报告http://bugs.java.com/view_bug.do?bug_id=7166687,这可能解释了为什么有这么多混淆。
InetAddress.getLocalHost().getHostName()

这个现在只返回主机名。

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));
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接