Java 获取iP地址
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 | package com.bonc.utils; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import javax.servlet.http.HttpServletRequest; /** * IP地址 * * @Author * @email * @Date */ public class IPUtils { private static Logger logger = LoggerFactory.getLogger(IPUtils. class ); /** * 获取IP地址 * * 使用Nginx等反向代理软件, 则不能通过request.getRemoteAddr()获取IP地址 * 如果使用了多级反向代理的话,X-Forwarded-For的值并不止一个,而是一串IP地址,X-Forwarded-For中第一个非unknown的有效IP字符串,则为真实IP地址 */ public static String getIpAddr(HttpServletRequest request) { String ip = null ; try { ip = request.getHeader( "x-forwarded-for" ); if (StringUtils.isEmpty(ip) || "unknown" .equalsIgnoreCase(ip)) { ip = request.getHeader( "Proxy-Client-IP" ); } if (StringUtils.isEmpty(ip) || ip.length() == 0 || "unknown" .equalsIgnoreCase(ip)) { ip = request.getHeader( "WL-Proxy-Client-IP" ); } if (StringUtils.isEmpty(ip) || "unknown" .equalsIgnoreCase(ip)) { ip = request.getHeader( "HTTP_CLIENT_IP" ); } if (StringUtils.isEmpty(ip) || "unknown" .equalsIgnoreCase(ip)) { ip = request.getHeader( "HTTP_X_FORWARDED_FOR" ); } if (StringUtils.isEmpty(ip) || "unknown" .equalsIgnoreCase(ip)) { ip = request.getRemoteAddr(); } } catch (Exception e) { logger.error( "IPUtils ERROR = {}" , e.getMessage()); } // //使用代理,则获取第一个IP地址 // if(StringUtils.isEmpty(ip) && ip.length() > 15) { // if(ip.indexOf(",") > 0) { // ip = ip.substring(0, ip.indexOf(",")); // } // } return ip; } } |
若在本级上获取的IP地址为0:0:0:0:0:0:0:1,则表示你的本机地址。当程序在你本地运行时,获取到的是ipv6的地址,当程序部署到服务器中时,就可获取到外网的ip地址,格式类似于192.168.1.1
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)