|
NetUtils |
|
/* ** Caramel - Core Java Toolbox ** Copyright (c) 2001, 2002, 2003 by Gerald Bauer ** ** This program is free software. ** ** You may redistribute it and/or modify it under the terms of the GNU ** General Public License as published by the Free Software Foundation. ** Version 2 of the license should be included with this distribution in ** the file LICENSE, as well as License.html. If the license is not ** included with this distribution, you may find a copy at the FSF web ** site at 'www.gnu.org' or 'www.fsf.org', or you may write to the ** Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139 USA. ** ** THIS SOFTWARE IS PROVIDED AS-IS WITHOUT WARRANTY OF ANY KIND, ** NOT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY. THE AUTHOR ** OF THIS SOFTWARE, ASSUMES _NO_ RESPONSIBILITY FOR ANY ** CONSEQUENCE RESULTING FROM THE USE, MODIFICATION, OR ** REDISTRIBUTION OF THIS SOFTWARE. ** */ package caramel.util; import java.net.*; import houston.*; public class NetUtils { /** * cache local host name */ private static String _localHostName = null; public static char getIpClass( InetAddress ip ) { // source published in O'Reilly Java Network Programming // p178 byte address[] = ip.getAddress(); if( address.length != 4 ) throw new IllegalArgumentException( "address has more than 4 bytes; possibly IPv6 address" ); int firstByte = address[0]; if( ( firstByte & 0x80 ) == 0 ) return 'A'; else if( ( firstByte & 0xC0 ) == 0x80 ) return 'B'; else if( ( firstByte & 0xE0 ) == 0xC0 ) return 'C'; else if( ( firstByte & 0xF0 ) == 0xE0 ) return 'D'; else if( ( firstByte & 0xF8 ) == 0xF0 ) return 'E'; else return 'F'; } public static String getLocalHostName() { if( _localHostName == null ) { try { _localHostName = InetAddress.getLocalHost().getHostName(); } catch( UnknownHostException e ) { Status.error( "*** failed to get local host name: " + e.toString() ); // use loopback host address if all else fails _localHostName = "127.0.0.1"; } } return _localHostName; } public static boolean isHostName( String host ) { // check if hostName is really a host name and not an host address // that is, 127.0.0.1, for example char s[] = host.toCharArray(); // if we see a character that is neither a digit nor a period // then host is probably a host name for( int i = 0; i < s.length; i++ ) { if( !Character.isDigit( s[i] ) && s[i] != '.' ) return true; } return false; } public static boolean isLoopbackIp( InetAddress ip ) { byte address[] = ip.getAddress(); if( address[0] == 127 && address[1] == 0 && address[2] == 0 && address[3] == 1 ) return true; return false; } public static boolean isPrivateIp( InetAddress ip ) { // private network space ip ranges defined by RFC 1918 // // 10.0.0.0 through 10.255.255.255 (class A) // 172.16.0.0 through 172.31.255.255 (class B) // 192.168.0.0 through 192.168.255.255 (class C) byte address[] = ip.getAddress(); // note: a byte is signed! // byte values from 128 to 255 are negative numbers! // to make it easier convert it to an unsigned byte int firstQuad = address[0] < 0 ? address[0] + 256 : address[0]; int secondQuad = address[1] < 0 ? address[1] + 256 : address[1]; int thirdQuad = address[2] < 0 ? address[2] + 256 : address[2]; int fourthQuad = address[3] < 0 ? address[3] + 256 : address[3]; // check 10.0.0.0 through 10.255.255.255 (class A) if( firstQuad == 10 ) return true; // check 172.16.0.0 through 172.31.255.255 (class B) if( firstQuad == 172 ) { if( secondQuad >= 16 && secondQuad <= 31 ) return true; } // 192.168.0.0 through 192.168.255.255 (class C) if( firstQuad == 192 && secondQuad == 168 ) return true; return false; } }
|
NetUtils |
|