我正在尝试使用Java代码获取我域中Windows机器的FQDN。
我尝试了InetAddress.getByName("machine-1").getCanonicalHostName()
,但只返回了机器名称。
另一方面,如果我ping“machine-1”,我会得到完整的域名。
你知道怎么做吗?
答案 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));
}