JAVA 获取本机IP(包括 内网IP 和 公网IP)

Spring 获取客户端请求 IP,详见:https://blog.csdn.net/NRlovestudy/article/details/90900925

本文获取的是 项目所在系统的IP(本地IP)

本地IP分为两个:局域网IP 和 公网IP 。下面是具体的代码实现(Windows 和 Linux 均适用)。

1、获取局域网IP

//这个方法有局限性  对于本系统自身 只能获取内网IP 本地测试用   
// 实际Linux系统  可改用下面那个方法,执行 curl 命令来获取
public static String getIpAddress() {
    try {
      Enumeration<NetworkInterface> allNetInterfaces = NetworkInterface.getNetworkInterfaces();
      InetAddress ip = null;
      while (allNetInterfaces.hasMoreElements()) {
	NetworkInterface netInterface = (NetworkInterface) allNetInterfaces.nextElement();
	if (netInterface.isLoopback() || netInterface.isVirtual() || !netInterface.isUp()) {
	  continue;
	} else {
	  Enumeration<InetAddress> addresses = netInterface.getInetAddresses();
	  while (addresses.hasMoreElements()) {
	    ip = addresses.nextElement();
	    if (ip != null && ip instanceof Inet4Address) {
		return ip.getHostAddress();
	    }
	  }
	}
      }
    } catch (Exception e) {
	System.err.println("IP地址获取失败" + e.toString());
    }
    return "";
}

2、获取公网IP

参考:https://www.cnblogs.com/webnote/p/5757435.html

Java执行curl命令

//执行 curl 命令
//执行 curl icanhazip.com 命令,可获取公网IP
public static String execCurl(String[] cmds) {
ProcessBuilder process = new ProcessBuilder(cmds);
Process p;
try {
    p = process.start();
    BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream()));
    StringBuilder builder = new StringBuilder();
    String line = null;
    while ((line = reader.readLine()) != null) {
	builder.append(line);
	builder.append(System.getProperty("line.separator"));
    }
    return builder.toString();

} catch (IOException e) {
    System.out.print("error");
    e.printStackTrace();
}
return null;

}

调用代码:

String[] cmds={"curl","icanhazip.com"};//必须分开写,不能有空格

String localIP = IPUtil.execCurl(cmds).trim();

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值