【问题标题】:InetAddress.getByName fails getaddrinfo worksInetAddress.getByName 失败 getaddrinfo 工作
【发布时间】:2017-05-11 20:35:40
【问题描述】:

我在使用 DNS 查找 IPv6 地址时遇到问题,我似乎无法找到有关该地址的好信息。

我正在尝试使用 InetAddress.getByName("ipv6.local.com") 查找 IPv6 地址。它会引发 UnknownHostException 错误。

奇怪的是我知道可以联系 DNS 服务器,因为这样可以:

InetAddress.getByName("ipv4.local.com")

我也知道 IPv6 记录正在工作,因为我可以运行:

nslookup ipv6.local.com

它会正确返回3ffe:b00:0:1:4678:3eff:fe36:16e8

同样,如果我在 C++ 中运行以下命令,我也会得到带有上述地址的结果:

int errorCode = getaddrinfo("ipv6.local.com", "4242", &hints, &res);

我也试过Inet6Address.getByName(),但这也会抛出UnknownHostException。那么为什么getaddrinfo()nslookup 工作而不是InetAddress.getByName()

我正在尝试从与 DNS 服务器在同一网络上运行 Android 6.0.1 的 Android 设备 (Galaxy Tab S2 8") 进行 DNS 查找。DNS 服务器有一条记录 "ipv4.local.com" 指向 192.168.0.190,并且一条记录 "ipv6.local.com" 指向 3ffe:b00:0:1:4678:3eff:fe36:16e8

DNS 服务器在 Android 设备的 Wi-Fi 设置中明确设置,并在 192.168.0.182 上运行。

有什么想法吗?

【问题讨论】:

  • InetAddress.getAllByName() 是否为您返回任何 IPv6 地址?
  • 谢谢雷米。不幸的是,getAllByName 会为 ipv6.local.com 抛出相同的 UnknownHostException 并且适用于 ipv4.local.com。
  • 您从哪里获得3ffe:b00:0:1:4678:3eff:fe36:16e8 地址?那是一个全局地址,除非它是由您的 ISP 或 RIR 分配给您的,否则您不应使用全局地址。我并不是说这是您的问题,但如果没有正确分配给您,将来可能会导致您出现问题。

标签: java android c++ networking ipv6


【解决方案1】:

我不确定为什么 IPv6 分辨率不适合您。这是我测试的Java代码示例(java版本“1.8.0_171”):

package com.myjava.ip;


import java.net.InetAddress;
import java.net.UnknownHostException;

class MyIpByHost {

    public static void main(String a[]){

        try {
            InetAddress host = InetAddress.getByName("ipv6.google.com");
            System.out.println(host.getHostAddress());
        } catch (UnknownHostException ex) {
            ex.printStackTrace();
        }
    }
}

输出:java com/myjava/ip/MyIpByHost => 2404:6800:4003:c02:0:0:0:8a

此代码返回端点“ipv6.google.com”的 IPv6。

Java 在其后端运行 C 函数以完成工作。如您所知,C 的 getaddrinfo() 函数支持 IPv6,但 gethostbyname() 不支持。 您可能正在运行带有底层 C 函数的过时 Java 版本 gethostbyname() 不支持 IPv6。我 建议您升级将使用 getaddrinfo() 的 Java。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-10-18
    • 1970-01-01
    • 1970-01-01
    • 2014-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多