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.";
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值