【问题标题】:Why is Java's InetAddress getHostName() not giving me the host's name?为什么 Java 的 InetAddress getHostName() 没有给我主机名?
【发布时间】:2016-03-29 23:06:32
【问题描述】:

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

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

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

根据文档...

公共字符串 getHostName ()

返回与此 IP 地址对应的主机名。这可能或 可能不是一个完全限定的名称。如果IP地址不能 已解决,而是返回数字表示

为什么找不到主机名?

我对计算机网络了解不多……所以请原谅我的无知。 :P

【问题讨论】:

标签: java android networking host inetaddress


【解决方案1】:

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

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

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

getCanonicalHostName() 获取此域名的完全限定域名 IP地址。尽力而为的方法,这意味着我们可能无法返回 FQDN 取决于底层系统配置。

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

也看看这个答案

link

【讨论】:

  • 我查看了 nslookup 并尝试了“nslookup launchmodem.com”,因为这是我从 ipconfig 获得的域。这是你的意思吗?如果我的 DNS 坏了,还有其他方法可以获取主机名吗?是否可以向路由器索取 DHCP 表?
  • 如果我的 DNS 坏了,我能做些什么吗?
  • 尝试在 cmd 提示符下刷新 DNS 缓存
  • "ipconfig /flushdns" 结果相同。我想知道是否有办法在 android 上获取 JNetPCap...当然我们可以使用 JNetPCap 来查找网络上设备的主机名?
【解决方案2】:

来自文档

如果这个 InetAddress 是用一个主机名创建的,这个主机名将被记住并返回;否则,将执行反向名称查找,并根据系统配置的名称查找服务返回结果。如果需要查找名称服务,请调用 getCanonicalHostName。

看起来普通的getHostName() 如果无法连接到 DNS 服务器,就不会查找名称。 DNS 服务器为主机 IP 地址命名,就像电话簿一样。试试getCanonicalHostName()

【讨论】:

  • getCanonicalHostName() 返回相同的结果
猜你喜欢
  • 2016-12-02
  • 1970-01-01
  • 2012-06-24
  • 1970-01-01
  • 2014-08-18
  • 2010-12-26
  • 1970-01-01
  • 1970-01-01
  • 2010-09-29
相关资源
最近更新 更多