InetAddress.getAllByName()/getByName() fails to resolve IPv6 via ssh

classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

InetAddress.getAllByName()/getByName() fails to resolve IPv6 via ssh

charis
I am facing the following issue:
Say there is a simple standlone code Test.java which just calls InetAddress.getAllByName() :


import java.net.Inet4Address;
import java.net.Inet6Address;
import java.net.InetAddress;
import java.net.UnknownHostException;


public class TestNameResolution {
    public static void main(String args[])  {
        String name = args[0];
        System.out.println("Trying to resolve name \"" + name + "\" to IP addresses");
        try {
            InetAddress[] addresses = InetAddress.getAllByName(name);
           
            for (int i = 0; i < addresses.length; i++) {
                if (addresses[i] instanceof Inet4Address) {
                     System.out.println("IPv4 address -->" + addresses[i].getHostAddress());
                }
                else if (addresses[i] instanceof Inet6Address) {
                     System.out.println("IPv6 address -->" + addresses[i].getHostAddress());
                }
            }
        }
        catch (UnknownHostException uhe) {
            System.out.println("Cannot resolve name \"" + name + "\"");
        }
    }    
}


I run this via a simple single-line script 'run':

java -classpath <absolute path of TestNameResolution.class> TestNameResolution <ipv6-name-to-resolve>


When try this locally it resolves the name to its IPv6 address as expected. However, when from a different machine to execute this via ssh (i.e.,  ssh <my machine name> <path to 'run' script>) I often get the following output:


Trying to resolve name "<ipv6-name-to-resolve>" to IP addresses
Cannot resolve name "<ipv6-name-to-resolve>"
java.net.UnknownHostException: <ipv6-name-to-resolve>
at java.net.Inet4AddressImpl.lookupAllHostAddr(Native Method)
at java.net.InetAddress$1.lookupAllHostAddr(InetAddress.java:849)
at
java.net.InetAddress.getAddressFromNameService(InetAddress.java:1202)
at java.net.InetAddress.getAllByName0(InetAddress.java:1153)
at java.net.InetAddress.getAllByName(InetAddress.java:1083)
at java.net.InetAddress.getAllByName(InetAddress.java:1019)
at TestNameResolution.main(TestNameResolution.java:14


Note:
- I tried the java command that invokes the standalone also with i) '-Djava.net.preferIPv6Stack=true' , ii) and '-Djava.net.preferIPv6Addresses=true' and iii) with both of them at the same time.
Still, the output is the same
- The same standalone succeeds in resolving a name which maps to IPv4 giving the same (correct) output on the local and the remote node (where the ssh is initiated)

Java environment details:
$ java -version
java version "1.6.0_37"
Java(TM) SE Runtime Environment (build 1.6.0_37-b06)


Is there any known issue with IPv6 name resolution via ssh? Any ideas what may be causing this?