【问题标题】:How To Resolve Network Host Names From IP Address如何从 IP 地址解析网络主机名
【发布时间】:2014-02-26 14:43:32
【问题描述】:

我正在开发基于 wifi 的聊天引擎,我能够通过以下this 链接检索连接到当前 wifi 网络的主机列表,现在获得了具有 ip 地址的设备列表,但我需要来自 ip 地址的主机名并尝试关注

InetAddress inetAddr;
try {
    inetAddr = InetAddress.getByName(host.hostname);
    String hostname = inetAddr.getHostName();
    String canonicalHostname = inetAddr.getCanonicalHostName();
    holder.computerName.setText("Canonical : "+host.hostname);
} catch (Exception e) {
    e.printStackTrace();
}

这里主机名和规范主机名都显示IP地址而不是主机名。

请帮助我如何实现这一目标。

【问题讨论】:

  • 你提供给host.hostname的价值是多少?
  • host.hostname是设备的ip地址
  • 您可以尝试进行反向 DNS(或 PTR)查找,但这只有在您使用的 DNS 服务具有您正在使用的地址范围的 PTR 记录时才有效,并且 设备具有要注册的名称。也许,你不会走得太远。

标签: android ip android-wifi hostname android-networking


【解决方案1】:

我认为你可以这样做:

try {
  Log.d("ReverseDNS", "Reverse DNS for 8.8.8.8 is: " + InetAddress.getByName("8.8.8.8").getHostName());
} catch (UnknownHostException e) {
  Log.e("ReverseDNS", "Oh no, 8.8.8.8 has no reverse DNS record!");
}

一些额外的事情:

  • 考虑到这是一个可能需要很长时间的操作(理解为几秒钟的长时间),所以绝对建议在ThreadAsyncTask 内完成。 /p>

  • 除了响应时间之外,这是一个网络操作,因此您需要在 UI 线程之外进行。

  • 1234563 /p>
  • 您将查询的 DNS 服务器是您的提供商之一(如果您计划在不同的客户端中运行,则为客户端的提供商)。这意味着并非每个结果都是相同的。例如,您的 DNS 服务器可能无法解析 IP 的反向主机,而其他 DNS 服务器可能会这样做。

【讨论】:

  • 我有一个 Android 设备,其中 getCanonicalHostName() 仅返回 IP 地址,但是通过 dig 进行反向 DNS PTR 查找表明它在网络上确实有一个主机名。同一网络上的其他 Android 设备似乎没有此问题。
【解决方案2】:

变量canonicalHostname 包含结果。 使用

holder.computerName.setText("Canonical : "+canonicalHostname);

【讨论】:

  • 规范名称和主机名都打印了我作为输入提供的相同 IP 地址
【解决方案3】:

这是因为从 IP 地址解析主机名涉及到所谓的"Reverse DNS Lookup"。此类查找的结果会因您连接到的 DNS 服务器而异。

【讨论】:

  • 如何知道我连接的是哪个 DNS 服务器??
猜你喜欢
  • 2013-03-25
  • 2012-08-04
  • 2019-09-29
  • 2011-03-12
  • 2014-10-13
  • 2011-01-10
  • 2013-01-29
  • 2015-10-21
  • 1970-01-01
相关资源
最近更新 更多