在Linux下用InetAddress.getLocalHost()方法獲取本機IP地址,
得到的結果總是:127.0.1.1。
原來這個是etc/hosts文件中的配置,並非網卡的IP地址。
可用代碼如下:注:該代碼只適合在Liunx,在Windows不支持;
/** * IP工具類 * @author lyh * @version 2012-7-5 * @see IpGetter * @since */ public class IpGetter { /** * 日志 */ private static final Logger log = Logger.getLogger(IpGetter.class); /** * 單網卡名稱 */ private static final String NETWORK_CARD = "eth0"; /** * 綁定網卡名稱 */ private static final String NETWORK_CARD_BAND = "bond0"; /** * * Description: 得到本機名<br> * @return * @see */ public static String getLocalHostName() { try { InetAddress addr = InetAddress.getLocalHost(); return addr.getHostName(); } catch (Exception e) { log.error("IpGetter.getLocalHostName出現異常!異常信息:" + e.getMessage()); return ""; } } /** * Description: linux下獲得本機IPv4 IP<br> * @return * @see */ public static String getLocalIP() { String ip = ""; try { Enumeration<NetworkInterface> e1 = (Enumeration<NetworkInterface>)NetworkInterface.getNetworkInterfaces(); while (e1.hasMoreElements()) { NetworkInterface ni = e1.nextElement(); //單網卡或者綁定雙網卡 if ((NETWORK_CARD.equals(ni.getName())) || (NETWORK_CARD_BAND.equals(ni.getName()))) { Enumeration<InetAddress> e2 = ni.getInetAddresses(); while (e2.hasMoreElements()) { InetAddress ia = e2.nextElement(); if (ia instanceof Inet6Address) { continue; } ip = ia.getHostAddress(); } break; } else { continue; } } } catch (SocketException e) { log.error("IpGetter.getLocalIP出現異常!異常信息:" + e.getMessage()); } return ip; } }