Java获取系统IP地址

在一个项目中如果你想获取系统的ip地址那么可能许多同学在想那是多么容易,但是如果在多种操作系统貌似就不那么简单了,下面看看怎么获取系统的ip地址的。
package easyway.tbs.commons; 
 
import java.net.InetAddress; 
import java.net.NetworkInterface; 
import java.net.SocketException; 
import java.net.UnknownHostException; 
import java.util.Enumeration; 
import java.util.Properties; 
import org.apache.log4j.Logger; 
/**
 * 
 * 本机系统信息
 * @author longgangbai
 *
 */ 
public final class SystemHelper { 
    private static final Logger logger = Logger.getLogger(SystemHelper.class); 
 
    //获得系统属性集   
    public static Properties props=System.getProperties(); 
    //操作系统名称 
    public static String OS_NAME=getPropertery("os.name"); 
    //行分页符 
    public static String OS_LINE_SEPARATOR=getPropertery("line.separator"); 
    //文件分隔符号 
    public static String OS_FILE_SEPARATOR=getPropertery("file.separator"); 
     
    /**
     * 
     * 根据系统的类型获取本服务器的ip地址
     * 
     * InetAddress inet = InetAddress.getLocalHost();
     * 但是上述代码在Linux下返回127.0.0.1。
     * 主要是在linux下返回的是/etc/hosts中配置的localhost的ip地址,
     * 而不是网卡的绑定地址。后来改用网卡的绑定地址,可以取到本机的ip地址:):
     * @throws UnknownHostException 
     */ 
    public static InetAddress getSystemLocalIp() throws UnknownHostException{ 
        InetAddress inet=null; 
        String osname=getSystemOSName(); 
        try { 
            //针对window系统 
            if(osname.equalsIgnoreCase("Windows XP")){ 
                    inet=getWinLocalIp(); 
            //针对linux系统 
            }else if(osname.equalsIgnoreCase("Linux")){ 
                    inet=getUnixLocalIp(); 
            } 
            if(null==inet){ 
                throw new UnknownHostException("主机的ip地址未知"); 
            } 
        }catch (SocketException e) { 
            logger.error("获取本机ip错误"+e.getMessage()); 
            throw new UnknownHostException("获取本机ip错误"+e.getMessage()); 
        } 
        return inet; 
    } 
    /**
     * 获取FTP的配置操作系统
     * @return
     */ 
    public static String getSystemOSName() { 
         //获得系统属性集   
        Properties props=System.getProperties(); 
        //操作系统名称 
        String osname=props.getProperty("os.name");   
        if(logger.isDebugEnabled()){ 
            logger.info("the ftp client system os Name "+osname); 
        } 
        return osname; 
    } 
    /**
     * 获取属性的值
     * @param propertyName
     * @return
     */ 
    public static String getPropertery(String propertyName){ 
        return props.getProperty(propertyName); 
    } 
     
     
    /**
     * 获取window 本地ip地址
     * @return
     * @throws UnknownHostException
     */ 
    private static InetAddress getWinLocalIp() throws UnknownHostException{ 
        InetAddress inet = InetAddress.getLocalHost();      
        System.out.println("本机的ip=" + inet.getHostAddress());  
         return inet; 
    } 
    /**
     * 
     * 可能多多个ip地址只获取一个ip地址
     * 获取Linux 本地IP地址
     * @return
     * @throws SocketException 
     */ 
    private static InetAddress getUnixLocalIp() throws SocketException{ 
            Enumeration<NetworkInterface> netInterfaces = NetworkInterface.getNetworkInterfaces(); 
            InetAddress ip = null;  
            while(netInterfaces.hasMoreElements())      
            {      
                NetworkInterface ni= (NetworkInterface)netInterfaces.nextElement();      
                ip=(InetAddress) ni.getInetAddresses().nextElement();      
                if( !ip.isSiteLocalAddress()      
                        && !ip.isLoopbackAddress()      
                        && ip.getHostAddress().indexOf(":")==-1)      
                {      
                    return ip; 
                }      
                else     
                {      
                    ip=null;      
                }      
            }    
        return null; 
    } 
    /**
     * 
     * 获取当前运行程序的内存信息
     * @return
     */ 
    public static final String getRAMinfo() { 
        Runtime rt = Runtime.getRuntime(); 
        return "RAM: " + rt.totalMemory() + " bytes total, " + rt.freeMemory() + " bytes free."; 
    } 
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值