InetAddress.isReachable returns true when pointing an unreachable IP

XMLWordPrintable

    • Type: Bug
    • Resolution: Duplicate
    • Priority: P3
    • None
    • Affects Version/s: 6u2
    • Component/s: core-libs
    • x86
    • linux_redhat_9.0

      InetAddress.isReachable returns true when pointing a host ip that actually does not exist.

      OS: RHEL4 or RHEL AS 3.
      JDK: jdk 6u2, jdk 5u2

      Below is the test program. To reproduce you must run the TP with root authority.

      ---->
      import java.net.*;

      class Multiping extends Thread {
          private InetAddress addr;
          private boolean reachable;
          static volatile boolean finish;

          public static void main( String arg[] ) throws Exception{
              new Multiping("192.168.3.2", true).start(); // put reachable host ip here
              new Multiping("10.210.45.39", false).start(); // put unreachable host ip
              finish = false;

              Thread.sleep(20000);
              finish = true;
          }

          Multiping( String str, boolean f ) {
              reachable = f;
              try {
                  addr = InetAddress.getByName( str );
              }
              catch ( UnknownHostException e ) {
                  e.printStackTrace();
                  System.exit(1);
              }
          }

          public void run() {
              try {
                  while( finish == false ) {
                      boolean result = addr.isReachable(3000);
                      if ( result != reachable ) {
                          if ( result ) {
                              System.out.println(addr+":reachable ... unexpected result");
                              System.exit(1);
                          }
                          else {
                              System.out.println(addr+":unreachable ... unexpected result");
                              System.exit(1);
                          }
                      }
                  }
              }
              catch(Exception e){
                  e.printStackTrace();
              }
          }
      }
      <----

      The following is the TP's result I ran.

      [root@kronos isReachable]# /home/xz137640/jdk/6u2/bin/java Multiping
      /10.210.45.39:reachable ... unexpected result

      It seems that the implementation can not determine the response is from which host because of raw packet using.

            Assignee:
            Chris Hegarty
            Reporter:
            Xiaojun Zhang (Inactive)
            Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

              Created:
              Updated:
              Resolved:
              Imported:
              Indexed: