我正在尝试使用 Java 代码在我的域中获取 Windows 机器的 FQDN。
我试过InetAddress.getByName("machine-1").getCanonicalHostName()
但只返回机器名称。
另一方面,如果我 ping “machine-1”,我会得到完整的域名。
你知道怎么做吗?
我正在尝试使用 Java 代码在我的域中获取 Windows 机器的 FQDN。
我试过InetAddress.getByName("machine-1").getCanonicalHostName()
但只返回机器名称。
另一方面,如果我 ping “machine-1”,我会得到完整的域名。
你知道怎么做吗?
简单的答案是,如果可以的话,您的建议是可行的。
API 确实声明如果可以,它将返回 FQDN。这取决于系统配置。
你发布的代码在 Windows 域机器上对我有用,但我不能说为什么它不适合你。
如果您无法更改机器/域配置以使 java 可以获取它,并且您的代码必须使用该 FQDN,您可以求助于从 java 执行 ping 命令并至少将结果解析为临时措施。
超级晚回复,也许对下一个旅行者有帮助。
InetAddress.getLocalHost().getCanonicalHostName()
这将返回 FQDN - 我的 JVM 版本是 1.8.0_144
我发现了这个 JDK 错误报告http://bugs.java.com/view_bug.do?bug_id=7166687这可能解释了为什么会有这么多的混乱。
InetAddress.getLocalHost().getHostName()
现在只返回主机名。
另一个迟到的回复,但我今天也需要这个,而且对我来说电话的答案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));
}