如何从IP地址解析网络主机名

时间:2014-02-03 07:27:15

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

我正在研究基于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地址而不是主机名。

请帮我解决这个问题。

3 个答案:

答案 0 :(得分:5)

我想你可以这样做:

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!");
}

其他一些事情:

  • 考虑到这是一项可能需要很长时间的操作(长时间理解几秒钟),因此绝对建议在Thread或{{1 }}

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

  • 还要记住,每个主机都有一个关联的IP地址,但并非每个IP地址都有一个反向主机,因此操作可能会失败,您需要来处理它。 / p>

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

答案 1 :(得分:0)

变量canonicalHostname包含结果。 使用

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

答案 2 :(得分:0)

这是因为从IP地址解析主机名涉及所谓的"Reverse DNS Lookup"。这种查找的结果将根据您连接的DNS服务器而有所不同。