Java tutorial
/** * Copyright (c) 2006 Richard Rodgers * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ //package com.monad.homerun.util; import java.net.InetAddress; import java.net.Inet6Address; import java.net.NetworkInterface; import java.net.SocketException; import java.net.UnknownHostException; import java.util.Enumeration; /* * Class for determining a host's IP address. * Uses several techniques to circumvent OS-specific problems in * specific calls. For example, 'getLocalHost()' on Linux tends to * return only the loopback address (bug, security?), but not on Windows. */ public class LocalAddress { /** * Return an address of a non-loopback interface on the local host * * @return address * the InetAddress of the local host */ public static InetAddress getLocalAddress() { InetAddress addr = null; try { addr = InetAddress.getLocalHost(); // OK - is this the loopback addr ? if (!addr.isLoopbackAddress()) { return addr; } // plan B - enumerate the network interfaces Enumeration ifaces = NetworkInterface.getNetworkInterfaces(); while (ifaces.hasMoreElements()) { NetworkInterface netIf = (NetworkInterface) ifaces.nextElement(); Enumeration addrs = netIf.getInetAddresses(); while (addrs.hasMoreElements()) { addr = (InetAddress) addrs.nextElement(); //System.out.println( "enum: " + addr.getHostAddress() ); if (addr instanceof Inet6Address) { // probably not what we want - keep looking continue; } // chose (arbitrarily?) first non-loopback addr if (!addr.isLoopbackAddress()) { return addr; } } } // nothing so far - last resort return getReflectedAddress(); } catch (UnknownHostException uhE) { // deal with this } catch (SocketException sockE) { // can deal? } return null; } // get the address a server sees when you make a request // 'whatismyip.org' style resolution private static InetAddress getReflectedAddress() { // RLR TODO - this will be a standard homerun service // but need to encypt or obfuscate to prevent abuse return null; } public static void main(String[] args) { System.out.println("OS: " + System.getProperty("os.name") + " vsn: " + System.getProperty("os.version") + " on: " + System.getProperty("os.arch")); InetAddress local = getLocalAddress(); if (local != null) { System.out.println("localAddress: " + local.getHostAddress()); } else { System.out.println("localAddress not found"); } } }