Linux下獲得本機IP(非127.0.0.1)


在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;
    }

}

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM