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

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-11-06 17:42:07

Java获取系统IP地址的相关文章

java获取客户端IP地址和MAC地址

最近项目中要获得客户端的mac地址.服务端是移植的centos系统,arm架构的盒子.客户端是手机和移动设备.(其它场景应该也是类似的) 首先要获得ip地址: 根据客户端的http请求,利用request.getRemoteAddr()获取客户端Ip地址.在局域网内getRemoteAddr()和getRemoteHost()获得的结果相同.request.getRemoteAddr()是获得客户端的ip地址 .getRemoteHost()是获得客户端的主机名 .在有些场景中,可能有Squid

Java 获取真实IP地址

当项目发布在内网的时候,主机(如IP地址为192.168.10.88)访问局域网服务器的url,如http://192.168.10.142:8080/index/,用request.getRemoteAddr()获取到的主机IP地址是192.168.10.142,而不是真实的IP地址192.168.10.88.为了解决这个问题,可以采用以下方法避免该问题产生. public static String getIpAddress(HttpServletRequest request) {    

多级反向代理java获取真实IP地址

public static String getIpAddress(HttpServletRequest request){ String ip = request.getHeader("x-forwarded-for"); if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = request.getHeader("Proxy-Client-IP"

JAVA获取计算机IP地址

import java.net.InetAddress;import java.net.UnknownHostException;public class HuoQu {    public static void main(String[] args) throws UnknownHostException {        // TODO Auto-generated method stub        InetAddress IP = InetAddress.getByName("DES

java获取客户端ip地址

public static String getIpAddr(HttpServletRequest request) { String ipAddress = null; ipAddress = request.getHeader("x-forwarded-for"); if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) { ipAddr

获取各种IP地址

最近做项目,犯了一个低级的错误,把获取客户端Ip当成获取本机IP了,被训的很厉害了,哎,是啊,怪自己太笨了,活该啊. java 获取客户端真实IP地址的方法: public String getIpAddr(HttpServletRequest request) { String ip = request.getHeader("x-forwarded-for"); if(ip == null || ip.length() == 0 || "unknown".equa

再论 ASP.NET 中获取客户端IP地址

说到IP获取无非是我们常见的以下几种方式,但是具体获取的值具体区别在哪?网上不乏相关文章,说的也是很详细,但是真正使用起来,还有很多不太对的地方.IP在不同系统中,应用相当广泛,常见的日志记录.广告分区域投放等. 1: HttpContext.Current.Request.ServerVariables["HTTP_VIA"]; 2: HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"

Java获取用户ip

Java 如何获取客户端IP呢? 下面是我总结的几种方法: /** * 获取客户端ip地址(可以穿透代理) * * @param request * @return */ public static String getRemoteAddr(HttpServletRequest request) { String ip = request.getHeader("X-Forwarded-For"); if (ip == null || ip.length() == 0 || "

获取主机ip地址

Linux或windows的ip地址 import java.net.InetAddress; import java.net.NetworkInterface; import java.net.SocketException; import java.net.UnknownHostException; import java.util.Enumeration; /** * * @author LiCJ * @date 2017.04.12 */ public class WebTools {