java获取主机IP地址,适用于Linux以及windows环境

http://www.zuidaima.com/share/1909940378979328.htm

package com.ccssoft.omc.log4j;

import java.net.InetAddress;
import java.net.NetworkInterface;
import java.net.UnknownHostException;
import java.util.Enumeration;

public class HostData {

// 主机名称
public String hostName;
// 主机ip
public String ip;

public String getHostName() {
    return hostName;
}

public void setHostName(String hostName) {
    this.hostName = hostName;
}

public String getIp() {
    return ip;
}

public void setIp(String ip) {
    this.ip = ip;
}

public HostData() {
    try {
        this.hostName = java.net.InetAddress.getLocalHost().getHostName();
        // this.ip = java.net.Inet4Address.getLocalHost().getHostAddress();
        this.ip = getLocalIP();
    } catch (UnknownHostException e) {
        setHostName("unknown-host");
    }
}

/**
 * 获得主机IP
 * 
 * @return String
 */
public static boolean isWindowsOS() {
    boolean isWindowsOS = false;
    String osName = System.getProperty("os.name");
    if (osName.toLowerCase().indexOf("windows") > -1) {
        isWindowsOS = true;
    }
    return isWindowsOS;
}

/**
 * 获取本机ip地址,并自动区分Windows还是linux操作系统
 * 
 * @return String
 */
public static String getLocalIP() {
    String sIP = "";
    InetAddress ip = null;
    try {
        // 如果是Windows操作系统
        if (isWindowsOS()) {
            ip = InetAddress.getLocalHost();
        }
        // 如果是Linux操作系统
        else {
            boolean bFindIP = false;
            Enumeration<NetworkInterface> netInterfaces = (Enumeration<NetworkInterface>) NetworkInterface
                    .getNetworkInterfaces();
            while (netInterfaces.hasMoreElements()) {
                if (bFindIP) {
                    break;
                }
                NetworkInterface ni = (NetworkInterface) netInterfaces
                        .nextElement();
                // ----------特定情况,可以考虑用ni.getName判断
                // 遍历所有ip
                Enumeration<InetAddress> ips = ni.getInetAddresses();
                while (ips.hasMoreElements()) {
                    ip = (InetAddress) ips.nextElement();
                    if((ip.getHostAddress().endsWith(".0")) || (ip.getHostAddress().endsWith(".1"))){
                        continue;
                    }
                    if (ip.isSiteLocalAddress() && !ip.isLoopbackAddress() // 127.开头的都是lookback地址
                            && ip.getHostAddress().indexOf(":") == -1) {
                        bFindIP = true;
                        break;
                    }
                }

            }
        }
    } catch (Exception e) {
        e.printStackTrace();
    }

    if (null != ip) {
        sIP = ip.getHostAddress();
    }
    return sIP;
}

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • /Library/Java/JavaVirtualMachines/jdk-9.jdk/Contents/Home...
    光剑书架上的书阅读 4,145评论 2 8
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,309评论 19 139
  • 在应用程序中添加日志记录总的来说基于三个目的:监视代码中变量的变化情况,周期性的记录到文件中供其他应用进行统计分析...
    时待吾阅读 5,187评论 1 13
  • 在应用程序中添加日志记录总的来说基于三个目的:监视代码中变量的变化情况,周期性的记录到文件中供其他应用进行统计分析...
    时待吾阅读 5,124评论 0 6
  • 这是武老师直播的笔记,送给自己周末的礼物,biu~ 1 生能量和死能量 所谓有韧劲的生命,就是能抱持住死能量。 为...
    方知方行阅读 766评论 1 1

友情链接更多精彩内容