You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@harmony.apache.org by "Paulex Yang (JIRA)" <ji...@apache.org> on 2006/02/09 04:39:00 UTC

[jira] Updated: (HARMONY-73) java.net.InetAddress.getLocalHost() returns wrong host name for loopback address

     [ http://issues.apache.org/jira/browse/HARMONY-73?page=all ]

Paulex Yang updated HARMONY-73:
-------------------------------

    Attachment: InetAddress.patch

A suggested modification is to add these two lines before Ln. 296 of java.net.InetAddress, 

if(this == LOOPBACK){
     return "localhost";
}

So that the getHostName() will return "localhost" instead of "127.0.0.1".

The patch is attached. 

>  java.net.InetAddress.getLocalHost() returns wrong host name for loopback address
> ---------------------------------------------------------------------------------
>
>          Key: HARMONY-73
>          URL: http://issues.apache.org/jira/browse/HARMONY-73
>      Project: Harmony
>         Type: Bug
>   Components: Classlib
>     Reporter: Svetlana Samoilenko
>     Priority: Minor
>  Attachments: InetAddress.patch
>
> J2se 1.4.2 and 5.0 specifications for java.net.InetAddress.getLocalHost() read, that if there is a security manager, its checkConnect method is called with the local host name and -1 as its arguments to see if the operation is allowed. 
> If the operation is not allowed, an InetAddress representing the loopback address is returned as hostname/hostaddress (as followed from toString() specification).
> The test listed below shows that the returned loopback address has wrong hostname, "127.0.0.1" instead of "loopback".
> Inet_SecurityManager class is called twice and therefore host name is substituted with hostaddress address.
> Code to reproduce: 
> import java.net.*; 
> public class test2 { 
>     public static void main(String[] args) { 
>         try { 
>             System.setSecurityManager(new Inet_SecurityManager());
>             System.out.println("Loopback address = " + InetAddress.getLocalHost());
>         } catch (Exception e){ 
>             System.out.println("Unexpected exception = " + e); 
>         }; 
>     } 
> } 
> class Inet_SecurityManager extends SecurityManager { 
>     public void checkConnect(String host, int port) { 
>         super.checkConnect(host,port); 
>         throw new SecurityException();
>     }
> }
> Steps to Reproduce: 
> 1. Build Harmony (check-out on 2006-01-30) j2se subset as described in README.txt. 
> 2. Compile test2.java using BEA 1.4 javac 
> > javac -d . test2.java 
> 3. Run java using compatible VM (J9) 
> > java -showversion test2 
> Output: 
> C:\tmp>C:\jrockit-j2sdk1.4.2_04\bin\java.exe -showversion test2 
> java version "1.4.2_04" 
> Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.2_04-b05) 
> BEA WebLogic JRockit(TM) 1.4.2_04 JVM (build ari-31788-20040616-1132-win-ia32, Native Threads, GC strategy: parallel) 
> Inet_SecurityManager :host= nswssamoil1
> Inet_SecurityManager :port= -1
> Loopback address = localhost/127.0.0.1
> C:\tmp>C:\harmony\trunk\deploy\jre\bin\java -showversion test2 
> (c) Copyright 1991, 2005 The Apache Software Foundation or its licensors, as applicable. 
> Inet_SecurityManager :host= nswssamoil1
> Inet_SecurityManager :port= -1
> Inet_SecurityManager :host= localhost
> Inet_SecurityManager :port= -1
> Loopback address = 127.0.0.1/127.0.0.1
> Suggested junit test case:
> ------------------------ InetAddressTest.java ------------------------------------------------- 
> import java.net.*; 
> import junit.framework.*; 
> public class InetAddressTest extends TestCase { 
>     public static void main(String[] args) { 
>         junit.textui.TestRunner.run(InetAddress.class); 
>     } 
>     public void test_getLocalHost() { 
>         try{            
>             System.setSecurityManager(new Inet_SecurityManager()); 
>             String hostname=InetAddress.getLocalHost().getHostName();           
>             assertEquals("localhost", hostname);
>         } catch (Exception e){ 
>             fail("Unexpected exception = " + e); 
>         };           
>    } 
> }
> class Inet_SecurityManager extends SecurityManager { 
>     public void checkConnect(String host, int port) { 
>         super.checkConnect(host,port); 
>         throw new SecurityException();
>     }
> } 

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
   http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
   http://www.atlassian.com/software/jira


Re: [jira] Updated: (HARMONY-73) java.net.InetAddress.getLocalHost() returns wrong host name for loopback address

Posted by Geir Magnusson Jr <ge...@pobox.com>.
Ok.

<aside>
The behavior strikes me as dumb.  Why return a textual representation? 
What good does that do anyone?  The caller has no clue there was a 
problem...
</aside>

geir

Paulex Yang wrote:
> As I commented in the JIRA, further study shows some interesting facts,
> 
> first, my prior patch is redundant, the actual bug is 
> http://issues.apache.org/jira/browse/HARMONY-84.
> 
> second, there is another different behavior of getHostName() between RI 
> and Harmony, but I consider it as RI's bug:
> 
> The java spec of getHostName() says:
> <spec>*
> Returns: *the host name for this IP address, or if the operation is not 
> allowed by the security check, the textual representation of the IP 
> address.
> </spec>
> 
> But the following test shows RI will return host name instead of IP 
> address if the host name can be got without reverse name lookup.
> 
> <code>
> public class HostNameTest{
>    public static void main(String[] args) throws Exception{
>        InetAddress addr = InetAddress.getByName("localhost");
>        InetAddress addr2 = InetAddress.getByAddress(new byte[]{127, 0, 
> 0, 1});
>        SecurityManager sm = new Inet_SecurityManager();
>        System.setSecurityManager(sm);
>        System.out.println(addr.getHostName());
>        System.out.println(addr2.getHostName());
>    }
>      static class Inet_SecurityManager extends SecurityManager {
>        public void checkConnect(String host, int port) {
>         super.checkConnect(host,port);
>        throw new SecurityException();
>        }
>    }
> }
> </code>
> 
> RI outputs:
> localhost
> 127.0.0.1
> 
> Harmony outputs:
> 127.0.0.1
> 127.0.0.1
> 
> This time, Harmony win :-D .
> 
> Geir Magnusson Jr wrote:
>> isn't "localhost" actually something in the local hosts file?  Don't 
>> you want to look this up?
>>
>> Paulex Yang (JIRA) wrote:
>>>      [ http://issues.apache.org/jira/browse/HARMONY-73?page=all ]
>>>
>>> Paulex Yang updated HARMONY-73:
>>> -------------------------------
>>>
>>>     Attachment: InetAddress.patch
>>>
>>> A suggested modification is to add these two lines before Ln. 296 of 
>>> java.net.InetAddress,
>>> if(this == LOOPBACK){
>>>      return "localhost";
>>> }
>>>
>>> So that the getHostName() will return "localhost" instead of 
>>> "127.0.0.1".
>>>
>>> The patch is attached.
>>>>  java.net.InetAddress.getLocalHost() returns wrong host name for 
>>>> loopback address
>>>> --------------------------------------------------------------------------------- 
>>>>
>>>>
>>>>          Key: HARMONY-73
>>>>          URL: http://issues.apache.org/jira/browse/HARMONY-73
>>>>      Project: Harmony
>>>>         Type: Bug
>>>>   Components: Classlib
>>>>     Reporter: Svetlana Samoilenko
>>>>     Priority: Minor
>>>>  Attachments: InetAddress.patch
>>>>
>>>> J2se 1.4.2 and 5.0 specifications for 
>>>> java.net.InetAddress.getLocalHost() read, that if there is a 
>>>> security manager, its checkConnect method is called with the local 
>>>> host name and -1 as its arguments to see if the operation is 
>>>> allowed. If the operation is not allowed, an InetAddress 
>>>> representing the loopback address is returned as 
>>>> hostname/hostaddress (as followed from toString() specification).
>>>> The test listed below shows that the returned loopback address has 
>>>> wrong hostname, "127.0.0.1" instead of "loopback".
>>>> Inet_SecurityManager class is called twice and therefore host name 
>>>> is substituted with hostaddress address.
>>>> Code to reproduce: import java.net.*; public class test2 {     
>>>> public static void main(String[] args) {         try {             
>>>> System.setSecurityManager(new Inet_SecurityManager());
>>>>             System.out.println("Loopback address = " + 
>>>> InetAddress.getLocalHost());
>>>>         } catch (Exception e){             
>>>> System.out.println("Unexpected exception = " + e);         };     } 
>>>> } class Inet_SecurityManager extends SecurityManager {     public 
>>>> void checkConnect(String host, int port) {         
>>>> super.checkConnect(host,port);         throw new SecurityException();
>>>>     }
>>>> }
>>>> Steps to Reproduce: 1. Build Harmony (check-out on 2006-01-30) j2se 
>>>> subset as described in README.txt. 2. Compile test2.java using BEA 
>>>> 1.4 javac
>>>>> javac -d . test2.java 
>>>> 3. Run java using compatible VM (J9)
>>>>> java -showversion test2 
>>>> Output: C:\tmp>C:\jrockit-j2sdk1.4.2_04\bin\java.exe -showversion 
>>>> test2 java version "1.4.2_04" Java(TM) 2 Runtime Environment, 
>>>> Standard Edition (build 1.4.2_04-b05) BEA WebLogic JRockit(TM) 
>>>> 1.4.2_04 JVM (build ari-31788-20040616-1132-win-ia32, Native 
>>>> Threads, GC strategy: parallel) Inet_SecurityManager :host= nswssamoil1
>>>> Inet_SecurityManager :port= -1
>>>> Loopback address = localhost/127.0.0.1
>>>> C:\tmp>C:\harmony\trunk\deploy\jre\bin\java -showversion test2 (c) 
>>>> Copyright 1991, 2005 The Apache Software Foundation or its 
>>>> licensors, as applicable. Inet_SecurityManager :host= nswssamoil1
>>>> Inet_SecurityManager :port= -1
>>>> Inet_SecurityManager :host= localhost
>>>> Inet_SecurityManager :port= -1
>>>> Loopback address = 127.0.0.1/127.0.0.1
>>>> Suggested junit test case:
>>>> ------------------------ InetAddressTest.java 
>>>> ------------------------------------------------- import java.net.*; 
>>>> import junit.framework.*; public class InetAddressTest extends 
>>>> TestCase {     public static void main(String[] args) {         
>>>> junit.textui.TestRunner.run(InetAddress.class);     }     public 
>>>> void test_getLocalHost() {         try{                        
>>>> System.setSecurityManager(new Inet_SecurityManager());             
>>>> String hostname=InetAddress.getLocalHost().getHostName();           
>>>>             assertEquals("localhost", hostname);
>>>>         } catch (Exception e){             fail("Unexpected 
>>>> exception = " + e);         };              } }
>>>> class Inet_SecurityManager extends SecurityManager {     public void 
>>>> checkConnect(String host, int port) {         
>>>> super.checkConnect(host,port);         throw new SecurityException();
>>>>     }
>>>> } 
>>>
>>
> 
> 

Re: [jira] Updated: (HARMONY-73) java.net.InetAddress.getLocalHost() returns wrong host name for loopback address

Posted by Paulex Yang <pa...@gmail.com>.
As I commented in the JIRA, further study shows some interesting facts,

first, my prior patch is redundant, the actual bug is 
http://issues.apache.org/jira/browse/HARMONY-84.

second, there is another different behavior of getHostName() between RI 
and Harmony, but I consider it as RI's bug:

The java spec of getHostName() says:
<spec>*
Returns: *the host name for this IP address, or if the operation is not 
allowed by the security check, the textual representation of the IP address.
</spec>

But the following test shows RI will return host name instead of IP 
address if the host name can be got without reverse name lookup.

<code>
public class HostNameTest{
    public static void main(String[] args) throws Exception{
        InetAddress addr = InetAddress.getByName("localhost");
        InetAddress addr2 = InetAddress.getByAddress(new byte[]{127, 0, 
0, 1});
        SecurityManager sm = new Inet_SecurityManager();
        System.setSecurityManager(sm);
        System.out.println(addr.getHostName());
        System.out.println(addr2.getHostName());
    }
   
    static class Inet_SecurityManager extends SecurityManager {
        public void checkConnect(String host, int port) {
         super.checkConnect(host,port);
        throw new SecurityException();
        }
    }
}
</code>

RI outputs:
localhost
127.0.0.1

Harmony outputs:
127.0.0.1
127.0.0.1

This time, Harmony win :-D .

Geir Magnusson Jr wrote:
> isn't "localhost" actually something in the local hosts file?  Don't 
> you want to look this up?
>
> Paulex Yang (JIRA) wrote:
>>      [ http://issues.apache.org/jira/browse/HARMONY-73?page=all ]
>>
>> Paulex Yang updated HARMONY-73:
>> -------------------------------
>>
>>     Attachment: InetAddress.patch
>>
>> A suggested modification is to add these two lines before Ln. 296 of 
>> java.net.InetAddress,
>> if(this == LOOPBACK){
>>      return "localhost";
>> }
>>
>> So that the getHostName() will return "localhost" instead of 
>> "127.0.0.1".
>>
>> The patch is attached.
>>>  java.net.InetAddress.getLocalHost() returns wrong host name for 
>>> loopback address
>>> --------------------------------------------------------------------------------- 
>>>
>>>
>>>          Key: HARMONY-73
>>>          URL: http://issues.apache.org/jira/browse/HARMONY-73
>>>      Project: Harmony
>>>         Type: Bug
>>>   Components: Classlib
>>>     Reporter: Svetlana Samoilenko
>>>     Priority: Minor
>>>  Attachments: InetAddress.patch
>>>
>>> J2se 1.4.2 and 5.0 specifications for 
>>> java.net.InetAddress.getLocalHost() read, that if there is a 
>>> security manager, its checkConnect method is called with the local 
>>> host name and -1 as its arguments to see if the operation is 
>>> allowed. If the operation is not allowed, an InetAddress 
>>> representing the loopback address is returned as 
>>> hostname/hostaddress (as followed from toString() specification).
>>> The test listed below shows that the returned loopback address has 
>>> wrong hostname, "127.0.0.1" instead of "loopback".
>>> Inet_SecurityManager class is called twice and therefore host name 
>>> is substituted with hostaddress address.
>>> Code to reproduce: import java.net.*; public class test2 {     
>>> public static void main(String[] args) {         try {             
>>> System.setSecurityManager(new Inet_SecurityManager());
>>>             System.out.println("Loopback address = " + 
>>> InetAddress.getLocalHost());
>>>         } catch (Exception e){             
>>> System.out.println("Unexpected exception = " + e);         };     } 
>>> } class Inet_SecurityManager extends SecurityManager {     public 
>>> void checkConnect(String host, int port) {         
>>> super.checkConnect(host,port);         throw new SecurityException();
>>>     }
>>> }
>>> Steps to Reproduce: 1. Build Harmony (check-out on 2006-01-30) j2se 
>>> subset as described in README.txt. 2. Compile test2.java using BEA 
>>> 1.4 javac
>>>> javac -d . test2.java 
>>> 3. Run java using compatible VM (J9)
>>>> java -showversion test2 
>>> Output: C:\tmp>C:\jrockit-j2sdk1.4.2_04\bin\java.exe -showversion 
>>> test2 java version "1.4.2_04" Java(TM) 2 Runtime Environment, 
>>> Standard Edition (build 1.4.2_04-b05) BEA WebLogic JRockit(TM) 
>>> 1.4.2_04 JVM (build ari-31788-20040616-1132-win-ia32, Native 
>>> Threads, GC strategy: parallel) Inet_SecurityManager :host= nswssamoil1
>>> Inet_SecurityManager :port= -1
>>> Loopback address = localhost/127.0.0.1
>>> C:\tmp>C:\harmony\trunk\deploy\jre\bin\java -showversion test2 (c) 
>>> Copyright 1991, 2005 The Apache Software Foundation or its 
>>> licensors, as applicable. Inet_SecurityManager :host= nswssamoil1
>>> Inet_SecurityManager :port= -1
>>> Inet_SecurityManager :host= localhost
>>> Inet_SecurityManager :port= -1
>>> Loopback address = 127.0.0.1/127.0.0.1
>>> Suggested junit test case:
>>> ------------------------ InetAddressTest.java 
>>> ------------------------------------------------- import java.net.*; 
>>> import junit.framework.*; public class InetAddressTest extends 
>>> TestCase {     public static void main(String[] args) {         
>>> junit.textui.TestRunner.run(InetAddress.class);     }     public 
>>> void test_getLocalHost() {         try{                        
>>> System.setSecurityManager(new Inet_SecurityManager());             
>>> String hostname=InetAddress.getLocalHost().getHostName();           
>>>             assertEquals("localhost", hostname);
>>>         } catch (Exception e){             fail("Unexpected 
>>> exception = " + e);         };              } }
>>> class Inet_SecurityManager extends SecurityManager {     public void 
>>> checkConnect(String host, int port) {         
>>> super.checkConnect(host,port);         throw new SecurityException();
>>>     }
>>> } 
>>
>


-- 
Paulex Yang
China Software Development Lab
IBM



Re: [jira] Updated: (HARMONY-73) java.net.InetAddress.getLocalHost() returns wrong host name for loopback address

Posted by huangzhu zhang <zh...@gmail.com>.
When SecurityManager doesn't allow the "lookup" operation, it returns
"localhost" instead of "127.0.0.1".  Otherwise, getHostName method will look
up the real hostname.


On 2/9/06, Geir Magnusson Jr <ge...@pobox.com> wrote:
>
> isn't "localhost" actually something in the local hosts file?  Don't you
> want to look this up?
>
> Paulex Yang (JIRA) wrote:
> >      [ http://issues.apache.org/jira/browse/HARMONY-73?page=all ]
> >
> > Paulex Yang updated HARMONY-73:
> > -------------------------------
> >
> >     Attachment: InetAddress.patch
> >
> > A suggested modification is to add these two lines before Ln. 296 of
> java.net.InetAddress,
> >
> > if(this == LOOPBACK){
> >      return "localhost";
> > }
> >
> > So that the getHostName() will return "localhost" instead of "127.0.0.1
> ".
> >
> > The patch is attached.
> >
> >>  java.net.InetAddress.getLocalHost() returns wrong host name for
> loopback address
> >>
> ---------------------------------------------------------------------------------
> >>
> >>          Key: HARMONY-73
> >>          URL: http://issues.apache.org/jira/browse/HARMONY-73
> >>      Project: Harmony
> >>         Type: Bug
> >>   Components: Classlib
> >>     Reporter: Svetlana Samoilenko
> >>     Priority: Minor
> >>  Attachments: InetAddress.patch
> >>
> >> J2se 1.4.2 and 5.0 specifications for java.net.InetAddress.getLocalHost()
> read, that if there is a security manager, its checkConnect method is called
> with the local host name and -1 as its arguments to see if the operation is
> allowed.
> >> If the operation is not allowed, an InetAddress representing the
> loopback address is returned as hostname/hostaddress (as followed from
> toString() specification).
> >> The test listed below shows that the returned loopback address has
> wrong hostname, "127.0.0.1" instead of "loopback".
> >> Inet_SecurityManager class is called twice and therefore host name is
> substituted with hostaddress address.
> >> Code to reproduce:
> >> import java.net.*;
> >> public class test2 {
> >>     public static void main(String[] args) {
> >>         try {
> >>             System.setSecurityManager(new Inet_SecurityManager());
> >>             System.out.println("Loopback address = " +
> InetAddress.getLocalHost());
> >>         } catch (Exception e){
> >>             System.out.println("Unexpected exception = " + e);
> >>         };
> >>     }
> >> }
> >> class Inet_SecurityManager extends SecurityManager {
> >>     public void checkConnect(String host, int port) {
> >>         super.checkConnect(host,port);
> >>         throw new SecurityException();
> >>     }
> >> }
> >> Steps to Reproduce:
> >> 1. Build Harmony (check-out on 2006-01-30) j2se subset as described in
> README.txt.
> >> 2. Compile test2.java using BEA 1.4 javac
> >>> javac -d . test2.java
> >> 3. Run java using compatible VM (J9)
> >>> java -showversion test2
> >> Output:
> >> C:\tmp>C:\jrockit-j2sdk1.4.2_04\bin\java.exe -showversion test2
> >> java version "1.4.2_04"
> >> Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.2_04-b05)
> >> BEA WebLogic JRockit(TM) 1.4.2_04 JVM (build
> ari-31788-20040616-1132-win-ia32, Native Threads, GC strategy: parallel)
> >> Inet_SecurityManager :host= nswssamoil1
> >> Inet_SecurityManager :port= -1
> >> Loopback address = localhost/127.0.0.1
> >> C:\tmp>C:\harmony\trunk\deploy\jre\bin\java -showversion test2
> >> (c) Copyright 1991, 2005 The Apache Software Foundation or its
> licensors, as applicable.
> >> Inet_SecurityManager :host= nswssamoil1
> >> Inet_SecurityManager :port= -1
> >> Inet_SecurityManager :host= localhost
> >> Inet_SecurityManager :port= -1
> >> Loopback address = 127.0.0.1/127.0.0.1
> >> Suggested junit test case:
> >> ------------------------ InetAddressTest.java-------------------------------------------------
> >> import java.net.*;
> >> import junit.framework.*;
> >> public class InetAddressTest extends TestCase {
> >>     public static void main(String[] args) {
> >>         junit.textui.TestRunner.run(InetAddress.class);
> >>     }
> >>     public void test_getLocalHost() {
> >>         try{
> >>             System.setSecurityManager(new Inet_SecurityManager());
> >>             String hostname=InetAddress.getLocalHost().getHostName();
> >>             assertEquals("localhost", hostname);
> >>         } catch (Exception e){
> >>             fail("Unexpected exception = " + e);
> >>         };
> >>    }
> >> }
> >> class Inet_SecurityManager extends SecurityManager {
> >>     public void checkConnect(String host, int port) {
> >>         super.checkConnect(host,port);
> >>         throw new SecurityException();
> >>     }
> >> }
> >
>

Re: [jira] Updated: (HARMONY-73) java.net.InetAddress.getLocalHost() returns wrong host name for loopback address

Posted by Geir Magnusson Jr <ge...@pobox.com>.
isn't "localhost" actually something in the local hosts file?  Don't you 
want to look this up?

Paulex Yang (JIRA) wrote:
>      [ http://issues.apache.org/jira/browse/HARMONY-73?page=all ]
> 
> Paulex Yang updated HARMONY-73:
> -------------------------------
> 
>     Attachment: InetAddress.patch
> 
> A suggested modification is to add these two lines before Ln. 296 of java.net.InetAddress, 
> 
> if(this == LOOPBACK){
>      return "localhost";
> }
> 
> So that the getHostName() will return "localhost" instead of "127.0.0.1".
> 
> The patch is attached. 
> 
>>  java.net.InetAddress.getLocalHost() returns wrong host name for loopback address
>> ---------------------------------------------------------------------------------
>>
>>          Key: HARMONY-73
>>          URL: http://issues.apache.org/jira/browse/HARMONY-73
>>      Project: Harmony
>>         Type: Bug
>>   Components: Classlib
>>     Reporter: Svetlana Samoilenko
>>     Priority: Minor
>>  Attachments: InetAddress.patch
>>
>> J2se 1.4.2 and 5.0 specifications for java.net.InetAddress.getLocalHost() read, that if there is a security manager, its checkConnect method is called with the local host name and -1 as its arguments to see if the operation is allowed. 
>> If the operation is not allowed, an InetAddress representing the loopback address is returned as hostname/hostaddress (as followed from toString() specification).
>> The test listed below shows that the returned loopback address has wrong hostname, "127.0.0.1" instead of "loopback".
>> Inet_SecurityManager class is called twice and therefore host name is substituted with hostaddress address.
>> Code to reproduce: 
>> import java.net.*; 
>> public class test2 { 
>>     public static void main(String[] args) { 
>>         try { 
>>             System.setSecurityManager(new Inet_SecurityManager());
>>             System.out.println("Loopback address = " + InetAddress.getLocalHost());
>>         } catch (Exception e){ 
>>             System.out.println("Unexpected exception = " + e); 
>>         }; 
>>     } 
>> } 
>> class Inet_SecurityManager extends SecurityManager { 
>>     public void checkConnect(String host, int port) { 
>>         super.checkConnect(host,port); 
>>         throw new SecurityException();
>>     }
>> }
>> Steps to Reproduce: 
>> 1. Build Harmony (check-out on 2006-01-30) j2se subset as described in README.txt. 
>> 2. Compile test2.java using BEA 1.4 javac 
>>> javac -d . test2.java 
>> 3. Run java using compatible VM (J9) 
>>> java -showversion test2 
>> Output: 
>> C:\tmp>C:\jrockit-j2sdk1.4.2_04\bin\java.exe -showversion test2 
>> java version "1.4.2_04" 
>> Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.2_04-b05) 
>> BEA WebLogic JRockit(TM) 1.4.2_04 JVM (build ari-31788-20040616-1132-win-ia32, Native Threads, GC strategy: parallel) 
>> Inet_SecurityManager :host= nswssamoil1
>> Inet_SecurityManager :port= -1
>> Loopback address = localhost/127.0.0.1
>> C:\tmp>C:\harmony\trunk\deploy\jre\bin\java -showversion test2 
>> (c) Copyright 1991, 2005 The Apache Software Foundation or its licensors, as applicable. 
>> Inet_SecurityManager :host= nswssamoil1
>> Inet_SecurityManager :port= -1
>> Inet_SecurityManager :host= localhost
>> Inet_SecurityManager :port= -1
>> Loopback address = 127.0.0.1/127.0.0.1
>> Suggested junit test case:
>> ------------------------ InetAddressTest.java ------------------------------------------------- 
>> import java.net.*; 
>> import junit.framework.*; 
>> public class InetAddressTest extends TestCase { 
>>     public static void main(String[] args) { 
>>         junit.textui.TestRunner.run(InetAddress.class); 
>>     } 
>>     public void test_getLocalHost() { 
>>         try{            
>>             System.setSecurityManager(new Inet_SecurityManager()); 
>>             String hostname=InetAddress.getLocalHost().getHostName();           
>>             assertEquals("localhost", hostname);
>>         } catch (Exception e){ 
>>             fail("Unexpected exception = " + e); 
>>         };           
>>    } 
>> }
>> class Inet_SecurityManager extends SecurityManager { 
>>     public void checkConnect(String host, int port) { 
>>         super.checkConnect(host,port); 
>>         throw new SecurityException();
>>     }
>> } 
>