java - InetAddress.getByName 失败 getaddrinfo 工作

标签 java android c++ networking ipv6

我一直遇到 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 上运行。

有什么想法吗?

最佳答案

我不确定为什么 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 run C functions in it's backend to get work done. As you already know getaddrinfo() function of C supports IPv6, but gethostbyname() does not. You may be running outdated version of java with underlying C function gethostbyname() which does not support IPv6. I would suggest you to upgrade Java which will use getaddrinfo().

关于java - InetAddress.getByName 失败 getaddrinfo 工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43925070/

相关文章:

java - Glide : How to resize and save the gif as file using Glide v4?

java - android中奇怪的内存分配

c++ - 为什么我们需要 C++ 中的虚函数?

c++ - 抽象类接口(interface)是否可以模板化

java - 在 Python 中复制 Java 密码哈希代码 (PBKDF2WithHmacSHA1)

java - Exiftool 未在 ProcessBuilder 中打印到文件?

java - java中构造函数线程的方法引用是安全的吗?

java - View.OnClickListener() 函数或接口(interface)

android - 如何在 Kotlin 中发出 API 请求?

c++ - 以 200 字节为单位读取二进制文件