7

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

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

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

你知道怎么做吗?

4

3 回答 3

2

简单的答案是,如果可以的话,您的建议是可行的。

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

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

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

于 2011-09-01T14:55:48.140 回答
1

超级晚回复,也许对下一个旅行者有帮助。

InetAddress.getLocalHost().getCanonicalHostName() 

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

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

InetAddress.getLocalHost().getHostName()

现在只返回主机名。

于 2017-08-23T12:40:32.720 回答
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));
}
于 2020-08-01T16:37:00.800 回答