-
2021-09-02 11:43:09
工具类:
springboot 获取访问接口的请求的IP地址
https://blog.csdn.net/qq_35387940/article/details/84391784
问题:无法获取到真实IP地址
获取出来全是 192.xxx.xxx.xxx 开头 或者 172.xxx.xxx.xxx 开头解决方案:
nginx代理需要做一些配置(如果是微服务,直接在网关服务的nginx做配置即可)#得到请求真实IP
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header HTTP_X_FORWARDED_FOR $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme; proxy_redirect default;
更多相关内容 -
java获取ip地址示例
2020-09-04 12:33:45在JSP里,获取客户端的IP地址的方法是:request.getRemoteAddr(),这种方法在大部分情况下都是有效的。但是在通过了Apache,Squid等反向代理软件就不能获取到客户端的真实IP地址了 -
Java获取ip地址
2021-04-15 14:58:03Java获取ip地址 package com.sinosoft.ireport; import java.net.InetAddress; import java.net.NetworkInterface; import java.net.SocketException; import java.net.UnknownHostException; import java.util....Java获取ip地址
package com.sinosoft.ireport; import java.net.InetAddress; import java.net.NetworkInterface; import java.net.SocketException; import java.net.UnknownHostException; import java.util.Enumeration; import javax.servlet.http.HttpServletRequest; /** * @program: Report * @description: 获取IP地址 * @author: XWJ * @create: 2021-04-14 21:03 **/ public class WebToolUtils { /** * 获取本地IP地址 * * @throws SocketException */ public static String getLocalIP() throws UnknownHostException, SocketException { if (isWindowsOS()) { return InetAddress.getLocalHost().getHostAddress(); } else { return getLinuxLocalIp(); } } /** * 判断操作系统是否是Windows * * @return */ public static boolean isWindowsOS() { boolean isWindowsOS = false; String osName = System.getProperty("os.name"); if (osName.toLowerCase().indexOf("windows") > -1) { isWindowsOS = true; } return isWindowsOS; } /** * 获取本地Host名称 */ public static String getLocalHostName() throws UnknownHostException { return InetAddress.getLocalHost().getHostName(); } /** * 获取Linux下的IP地址 * * @return IP地址 * @throws SocketException */ private static String getLinuxLocalIp() throws SocketException { String ip = ""; try { for (Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces(); en.hasMoreElements(); ) { NetworkInterface intf = en.nextElement(); String name = intf.getName(); if (!name.contains("docker") && !name.contains("lo")) { for (Enumeration<InetAddress> enumIpAddr = intf.getInetAddresses(); enumIpAddr.hasMoreElements(); ) { InetAddress inetAddress = enumIpAddr.nextElement(); if (!inetAddress.isLoopbackAddress()) { String ipaddress = inetAddress.getHostAddress().toString(); if (!ipaddress.contains("::") && !ipaddress.contains("0:0:") && !ipaddress.contains("fe80")) { ip = ipaddress; System.out.println(ipaddress); } } } } } } catch (SocketException ex) { System.out.println("获取ip地址异常"); ip = "127.0.0.1"; ex.printStackTrace(); } System.out.println("IP:" + ip); return ip; } /** * 获取用户真实IP地址,不使用request.getRemoteAddr();的原因是有可能用户使用了代理软件方式避免真实IP地址, * <p> * 可是,如果通过了多级反向代理的话,X-Forwarded-For的值并不止一个,而是一串IP值,究竟哪个才是真正的用户端的真实IP呢? * 答案是取X-Forwarded-For中第一个非unknown的有效IP字符串。 * <p> * 如:X-Forwarded-For:192.168.1.110, 192.168.1.120, 192.168.1.130, * 192.168.1.100 * <p> * 用户真实IP为: 192.168.1.110 * * @param request * @return */ 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"); } if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = request.getHeader("WL-Proxy-Client-IP"); } if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = request.getHeader("HTTP_CLIENT_IP"); } if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = request.getHeader("HTTP_X_FORWARDED_FOR"); } if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = request.getRemoteAddr(); } return ip; } }
-
java获取ip地址与网络接口的方法示例
2020-08-28 07:50:41主要给大家介绍了关于利用java如何获取ip地址与网络接口的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。 -
JAVA获取IP地址
2021-11-11 11:38:421、nginx 代理后客户端获取不到真实的ip需要nginx添加配置 location /api { proxy_pass http://127.0.0.1:8181/; #以下为新增 proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; #获取...1、nginx 代理后客户端获取不到真实的ip需要nginx添加配置
location /api { proxy_pass http://127.0.0.1:8181/; #以下为新增 proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; #获取客户端真实IP proxy_set_header REMOTE-HOST $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; }
添加配置后进行重启:进入nginx可执行目录sbin下,输入命令./nginx -s reload 即可
2、搜集的各种获取IP地址的方法
package com.sany.utils; import javax.servlet.http.HttpServletRequest; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.text.SimpleDateFormat; import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.databind.ObjectMapper; import com.sany.vo.IpVo; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.net.HttpURLConnection; import java.net.URL; public class IPUtils { private final static Logger logger = LoggerFactory.getLogger(IPUtils.class); public static String getVisitorIp(HttpServletRequest request){ // 优先取 X-Real-IP String ip = request.getHeader("X-Real-IP"); if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)){ ip = request.getHeader("x-forwarded-for"); } if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)){ ip = request.getRemoteAddr(); if ("0:0:0:0:0:0:0:1".equals(ip)) { ip = "unknown"; } } if ("unknown".equalsIgnoreCase(ip)){ ip = "unknown"; return ip; } int index = ip.indexOf(','); if (index >= 0){ ip = ip.substring(0, index); } return ip; } public static final String UN_KNOWN = "unknown"; public static String getIp(HttpServletRequest request) { String ip = request.getHeader("X-Requested-For"); if (StringUtils.isBlank(ip) || UN_KNOWN.equalsIgnoreCase(ip)) { ip = request.getHeader("X-Forwarded-For"); } if (StringUtils.isBlank(ip) || UN_KNOWN.equalsIgnoreCase(ip)) { ip = request.getHeader("Proxy-Client-IP"); } if (StringUtils.isBlank(ip) || UN_KNOWN.equalsIgnoreCase(ip)) { ip = request.getHeader("WL-Proxy-Client-IP"); } if (StringUtils.isBlank(ip) || UN_KNOWN.equalsIgnoreCase(ip)) { ip = request.getHeader("HTTP_CLIENT_IP"); } if (StringUtils.isBlank(ip) || UN_KNOWN.equalsIgnoreCase(ip)) { ip = request.getHeader("HTTP_X_FORWARDED_FOR"); } if (StringUtils.isBlank(ip) || UN_KNOWN.equalsIgnoreCase(ip)) { ip = request.getRemoteAddr(); } return StringUtils.isBlank(ip) ? null : ip.split(",")[0]; } /** * 获取用户真实IP地址,不使用request.getRemoteAddr()的原因是有可能用户使用了代理软件方式避免真实IP地址, * 可是,如果通过了多级反向代理的话,X-Forwarded-For的值并不止一个,而是一串IP值 * * @return ip */ public static String getIpAddrs(HttpServletRequest request) { String ip = request.getHeader("x-forwarded-for"); System.out.println("x-forwarded-for ip: " + ip); logger.info("x-forwarded-for ip: {}" , ip); if (ip != null && ip.length() != 0 && !"unknown".equalsIgnoreCase(ip)) { // 多次反向代理后会有多个ip值,第一个ip才是真实ip if( ip.indexOf(",")!=-1 ){ ip = ip.split(",")[0]; } } if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = request.getHeader("Proxy-Client-IP"); System.out.println("Proxy-Client-IP ip: " + ip); logger.info("Proxy-Client-IP ip: {}" , ip); } if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = request.getHeader("WL-Proxy-Client-IP"); logger.info("WL-Proxy-Client-IP ip: {} " , ip); } if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = request.getHeader("HTTP_CLIENT_IP"); logger.info("HTTP_CLIENT_IP ip: {} " ,ip); } if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = request.getHeader("HTTP_X_FORWARDED_FOR"); logger.info("HTTP_X_FORWARDED_FOR ip: {}" , ip); } if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = request.getHeader("X-Real-IP"); logger.info("X-Real-IP ip: {}" , ip); } if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = request.getRemoteAddr(); logger.info("getRemoteAddr ip: {}" , ip); } logger.info("获取客户端ip:{} " ,ip); return ip; } /** * 获取访问者的ip地址 * 注:要外网访问才能获取到外网地址,如果你在局域网甚至本机上访问,获得的是内网或者本机的ip */ public static String getIpAddr(HttpServletRequest request) { String ipAddress = null; try { //X-Forwarded-For:Squid 服务代理 String ipAddresses = request.getHeader("X-Forwarded-For"); if (ipAddresses == null || ipAddresses.length() == 0 || "unknown".equalsIgnoreCase(ipAddresses)) { //Proxy-Client-IP:apache 服务代理 ipAddresses = request.getHeader("Proxy-Client-IP"); } if (ipAddresses == null || ipAddresses.length() == 0 || "unknown".equalsIgnoreCase(ipAddresses)) { //WL-Proxy-Client-IP:weblogic 服务代理 ipAddresses = request.getHeader("WL-Proxy-Client-IP"); } if (ipAddresses == null || ipAddresses.length() == 0 || "unknown".equalsIgnoreCase(ipAddresses)) { //HTTP_CLIENT_IP:有些代理服务器 ipAddresses = request.getHeader("HTTP_CLIENT_IP"); } if (ipAddresses == null || ipAddresses.length() == 0 || "unknown".equalsIgnoreCase(ipAddresses)) { //X-Real-IP:nginx服务代理 ipAddresses = request.getHeader("X-Real-IP"); } //有些网络通过多层代理,那么获取到的ip就会有多个,一般都是通过逗号(,)分割开来,并且第一个ip为客户端的真实IP if (ipAddresses != null && ipAddresses.length() != 0) { ipAddress = ipAddresses.split(",")[0]; } //还是不能获取到,最后再通过request.getRemoteAddr();获取 if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddresses)) { ipAddress = request.getRemoteAddr(); } } catch (Exception e) { ipAddress = ""; } return ipAddress; } /** * 调用太平洋网络IP地址查询Web接口(http://whois.pconline.com.cn/),返回ip、地理位置 */ public static IpVo getIpVo(String ip){ //查本机 String url = "http://whois.pconline.com.cn/ipJson.jsp?json=true"; //查指定ip if(!StringUtils.isEmpty(ip)){ url = "http://whois.pconline.com.cn/ipJson.jsp?json=true&ip=" + ip; } StringBuilder inputLine = new StringBuilder(); String read; try { HttpURLConnection urlConnection = (HttpURLConnection) new URL(url).openConnection(); urlConnection.setRequestProperty("Charset", "GBK"); BufferedReader in = new BufferedReader(new InputStreamReader(urlConnection.getInputStream(), "GBK")); while ((read = in.readLine()) != null) { inputLine.append(read); } in.close(); } catch (Exception e) { e.printStackTrace(); } //返回格式 /* { ip: "58.63.47.115", pro: "广东省", proCode: "440000", city: "广州市", cityCode: "440100", region: "天河区", regionCode: "440106", addr: "广东省广州市天河区 电信", regionNames: "", err: "" } */ IpVo ipVo = null; try { ObjectMapper mapper = new ObjectMapper(); //当属性的值为空(null或者"")时,不进行序列化,可以减少数据传输 mapper.setSerializationInclusion(JsonInclude.Include.NON_EMPTY); //设置日期格式 mapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")); //转换成IpVo ipVo = mapper.readValue(new String(inputLine.toString().getBytes("GBK"), "GBK"), IpVo.class); } catch (IOException e) { e.printStackTrace(); } return ipVo; } /** * 直接根据访问者的Request,返回ip、地理位置 */ public static IpVo getIpVoByRequest(HttpServletRequest request){ return IPUtils.getIpVo(IPUtils.getIpAddr(request)); } /** * 获取客户端IP **/ public static String getClientIp(HttpServletRequest request){ if (request.getHeader("x-forwarded-for") == null){ return request.getRemoteAddr(); } return request.getHeader("x-forwarded-for"); } /* 终极大法:java获取不了,就用js来获取 <!-- js获取客户ip --> <script src="http://whois.pconline.com.cn/ipJson.jsp"></script> */ //测试 public static void main(String[] args) { //获取本机ip System.out.println(getIpVo(null)); } }
-
java获取ip地址返回地区
2018-07-09 16:50:34java获取ip地址返回国家、地区,城市名称,包含QQwry ip库 -
java获取IP地址的方法
2021-02-12 23:49:31java获取IP地址的方法发布时间:2020-06-10 11:54:31来源:亿速云阅读:184作者:Leah这篇文章运用了实例代码展示java获取IP地址的方法,代码非常详细,可供感兴趣的小伙伴们参考借鉴,希望对大家有所帮助。...java获取IP地址的方法
发布时间:2020-06-10 11:54:31
来源:亿速云
阅读:184
作者:Leah
这篇文章运用了实例代码展示java获取IP地址的方法,代码非常详细,可供感兴趣的小伙伴们参考借鉴,希望对大家有所帮助。/**
* 通过HttpServletRequest返回IP地址
*
* @param request HttpServletRequest
* @return ip String
* @throws Exception
*/
private static String getIpAddr(HttpServletRequest request) {
String ip = request.getHeader("x-forwarded-for");
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("Proxy-Client-IP");
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("WL-Proxy-Client-IP");
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("HTTP_CLIENT_IP");
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("HTTP_X_FORWARDED_FOR");
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getRemoteAddr();
if (LOCAL_IP.equals(ip) || LOCAL_IP1.equals(ip)) {
InetAddress inet = null;
try {
inet = InetAddress.getLocalHost();
ip = inet.getHostAddress();
} catch (UnknownHostException e) {
e.printStackTrace();
}
}
}
return ip;
}
HttpServletRequest对象代表客户端的请求,当客户端通过HTTP协议访问服务器时,HTTP请求头中的所有信息都封装在这个对象中,通过这个对象提供的方法,可以获得客户端请求的所有信息。
常用方法:
getRequestURL方法返回客户端发出请求时的完整URL。
getRequestURI方法返回请求行中的资源名部分。
getQueryString 方法返回请求行中的参数部分。
getPathInfo方法返回请求URL中的额外路径信息。额外路径信息是请求URL中的位于Servlet的路径之后和查询参数之前的内容,它以“/”开头。
getRemoteAddr方法返回发出请求的客户机的IP地址。
getRemoteHost方法返回发出请求的客户机的完整主机名。
getRemotePort方法返回客户机所使用的网络端口号。
getLocalAddr方法返回WEB服务器的IP地址。
getLocalName方法返回WEB服务器的主机名。
看完上述内容,你们掌握java获取IP地址的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注亿速云行业资讯频道,感谢各位的阅读!
-
JAVA如何获取客户端IP地址和MAC地址
2020-08-29 16:09:47本篇文章主要介绍了JAVA如何获取客户端IP地址和MAC地址非常具有实用价值,这里整理了详细的代码,需要的朋友可以参考下 -
java IP地址工具类,java IP地址获取,java获取客户端IP地址
2019-05-01 01:55:30NULL 博文链接:https://fanshuyao.iteye.com/blog/2436489 -
Java获取客户端的真实IP地址
2021-01-20 03:45:14在JSP里,获取客户端的IP地址的方法是:request.getRemoteAddr(),这种方法在大部分情况下都是有效的。但是在通过了Apache,Squid等反向代理软件不能获取到客户端的真实IP地址了。像移动网关一样,iisforward这个... -
java获取访问者的IP地址
2019-02-21 13:49:03java获取访问者的IP地址,适用于web开发。注意:如果是本地测试的话,通过localhost访问的时候ip显示为0:0:0:0:0:0:0:1,这代表的是本地,可以将localhost换成127.0.0.1时,显示的是当前访问的ip地址 -
java根据ip地址获取详细地域信息的方法
2020-08-31 11:34:54主要介绍了java根据ip地址获取详细地域信息的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧 -
获取IP地址工具类-java
2018-11-05 17:40:50java获取IP地址的工具类,使用时传入HttpServletRequest request类型的参数即可。使用例子 public static void logPageError(HttpServletRequest request){IpUtils.getIpAddr(request))} -
java实现根据ip地址获取地理位置
2020-09-02 15:57:28本文给大家汇总介绍了2种分别使用新浪和淘宝接口,实现根据IP地址获取详细的地理位置的代码,非常的实用,有需要的小伙伴可以参考下。 -
idea,java获取ip地址
2018-03-22 17:01:41使用intellij idea java开发软件,通过servlet获取访问用户的真实ip地址 -
Java获取ip所在地区
2018-08-01 09:10:53通过输入的ip地址,读取纯真ip数据库,获取该IP地址所在地区 -
java中获取当前服务器的Ip地址的方法
2020-08-31 11:13:41本篇文章主要介绍了java中获取当前服务器的Ip地址的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧 -
Java利用Request请求获取IP地址的方法详解
2020-08-29 00:35:20在开发中我们经常需要获取用户IP地址,通过地址来实现一些功能,下面这篇文章主要给大家介绍了关于Java利用Request请求获取IP地址的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面随着小... -
java实现根据ip地址获取地理位置的代码分享
2020-09-04 06:08:57主要介绍了java实现根据ip地址获取地理位置的代码分享,本文中使用的是QQ在线接口,也可以使用新浪、淘宝等提供的在线接口,需要的朋友可以参考下 -
java获取IP地址
2020-07-09 14:37:43一般登录记录用户信息的时候需要用到,获取用户的ip地址,记录在日志表信息中。 /** * */ package com.example.demo; import java.net.Inet4Address; import java.net.InetAddress; import java.net.... -
java获取IP地址工具类
2016-03-31 11:43:22利用淘宝IP地址库实现的利用IP获取用户所在地工具类 -
java获取IP地址和MAC地址方式
2020-05-09 21:38:14java获取IP地址和MAC地址方式 前端和后台都可以获取 ip获取方式比较简单,就不做分析了,主要说mac的获取 前端获取的方式与局限性:尝试好几种方式,这种是最易实现、最简单的方式,确实能获取该浏览器客户端的mac... -
Java中使用HttpRequest获取用户真实IP地址
2020-10-24 04:17:58主要介绍了Java中使用HttpRequest获取用户真实IP地址,使用本文方法可以避免Apache、Squid、nginx等反向代理软件导致的非真实IP地址,需要的朋友可以参考下 -
Java获取客户端真实IP地址过程解析
2020-08-25 03:37:41主要介绍了Java获取客户端真实IP地址过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 -
JAVA获得域名IP地址的方法
2020-09-03 14:42:22主要介绍了JAVA获得域名IP地址的方法,涉及java域名操作的相关技巧,需要的朋友可以参考下 -
Java获取当前ip地址
2019-05-13 21:41:05import java.net.Inet4Address; import java.net.InetAddress; import java.net.UnknownHostException; public class InetAddressInUse { public static void main(String[] args){ ... InetAddress ip4 =... -
java根据ip获取位置
2018-03-13 11:11:03java根据ip获取位置 根据IP地址获取详细的地域信息 淘宝API 新浪API -
Java获取IP地址和VUE获取IP地址。
2022-05-07 22:24:12前端和后端获取IP地址 -
java编程实现获取服务器IP地址及MAC地址的方法
2020-09-03 04:02:49主要介绍了java编程实现获取机器IP地址及MAC地址的方法,实例分析了Java分别针对单网卡及多网卡的情况下获取服务器IP地址与MAC地址的相关技巧,需要的朋友可以参考下