为什么 Java 的 InetAddress getHostName() 没有给我主机名?

Why is Java's InetAddress getHostName() not giving me the host's name?

我正在尝试使用网络上的本地 IP 地址获取设备的名称。这是我应该做的吗? ex) Arnold-PC, andoid-nnnnnnnnnn

String name = InetAddress.getByName(ip).getHostName();
System.out.println(name);

上面应该给我主机名...但给了我本地 IP 地址。 - 192.168.2.101

根据文档...

public String getHostName()

Returns the host name corresponding to this IP address. This may or may not be a fully-qualified name. If the IP address could not be resolved, the numeric representation is returned instead

为什么找不到主机名?

我对计算机网络知之甚少...所以请原谅我的无知。 :P

检查命令提示符是否可以使用 nsloookup 解析 ip 地址

如果你不能,那么你的 DNS 坏了

我想在这里引用 java 文档中的几行

getCanonicalHostName() Gets the fully qualified domain name for this IP address. Best effort method, meaning we may not be able to return the FQDN depending on the underlying system configuration.

另一个技巧是编辑主机文件以获得输出(不推荐)

也看看这个答案

link

来自文档

If this InetAddress was created with a host name, this host name will be remembered and returned; otherwise, a reverse name lookup will be performed and the result will be returned based on the system configured name lookup service. If a lookup of the name service is required, call getCanonicalHostName.

如果无法连接到 DNS 服务器,普通 getHostName() 似乎不会查找名称。 DNS 服务器会为主机 IP 地址命名,就像一本 phone 书一样。试试 getCanonicalHostName()