精华内容
下载资源
问答
  • Spring 获取客户端IP地址
    千次阅读
    2018-12-24 09:07:20

     HttpServletRequest req = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();

                po.setIp(IpUtil.clientIp(req));

    IpUtil.java

     

    Java代码 

     

    1. public class IpUtil {  
    2.     private static final Logger logger = LoggerFactory.getLogger(IpUtil.class);  
    3.   
    4.     /** 
    5.      * 获取的是本地的IP地址 
    6.      * 
    7.      * @return 
    8.      */  
    9.     public static String serviceIp() {  
    10.         String result = "";  
    11.         try {  
    12.             InetAddress address = InetAddress.getLocalHost();  
    13.             result = address.getHostAddress();  
    14.         } catch (UnknownHostException e) {  
    15.             logger.error("------>调用 IpUtil.servicerIp,错误信息如下");  
    16.             logger.error(e.getMessage(), e);  
    17.         }  
    18.         return result;  
    19.     }  
    20.   
    21.     /** 
    22.      * 获取的是该网站的ip地址,比如我们所有的请求都通过nginx的,所以这里获取到的其实是nginx服务器的IP地址 
    23.      * 
    24.      * @param domain 
    25.      * @return 
    26.      */  
    27.     public static String serviceIp(String domain) {  
    28.         String result = "";  
    29.         if (ValidatorUtil.isNotNullOrEmpty(domain)) {  
    30.             try {  
    31.                 InetAddress inetAddress = InetAddress.getByName(domain);  
    32.                 result = inetAddress.getHostAddress();  
    33.             } catch (UnknownHostException e) {  
    34.                 logger.error("------>调用 IpUtil.servicerIp,错误信息如下");  
    35.                 logger.error(e.getMessage(), e);  
    36.             }  
    37.         }  
    38.         return result;  
    39.     }  
    40.   
    41.     /** 
    42.      * 根据主机名返回其可能的所有Ip地址 
    43.      * 
    44.      * @param domain 
    45.      * @return 
    46.      */  
    47.     public static List<String> originalServiceIp(String domain) {  
    48.         List<String> result = new ArrayList<>();  
    49.         if (ValidatorUtil.isNotNullOrEmpty(domain)) {  
    50.             try {  
    51.                 InetAddress[] addresses = InetAddress.getAllByName(domain);  
    52.                 for (InetAddress addr : addresses) {  
    53.                     result.add(addr.getHostAddress());  
    54.                 }  
    55.             } catch (UnknownHostException e) {  
    56.                 logger.error("------>调用 IpUtil.originalServicerIp,错误信息如下");  
    57.                 logger.error(e.getMessage(), e);  
    58.             }  
    59.         }  
    60.         return result;  
    61.     }  
    62.   
    63.     /** 
    64.      * @param request 
    65.      * @return 
    66.      * @description: 如果通过了多级反向代理的话, 
    67.      * X-Forwarded-For的值并不止一个, 而是一串IP值, 
    68.      * 究竟哪个才是真正的用户端的真实IP呢? 
    69.      * 答案是取 X-Forwarded-For中第一个非unknown的有效IP字符串。 
    70.      */  
    71.     public static String clientIp(HttpServletRequest request) {  
    72.         String ip = request.getHeader("x-forwarded-for");  
    73.         if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {  
    74.             ip = request.getHeader("Proxy-Client-IP");  
    75.         }  
    76.         if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {  
    77.             ip = request.getHeader("WL-Proxy-Client-IP");  
    78.         }  
    79.         if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {  
    80.             ip = request.getRemoteAddr();  
    81.         }  
    82.         return ip;  
    83.     }  
    更多相关内容
  • TP 中获取客户端IP地址的系统公共函数是:function get_client_ip()。返回值就是IP地址。 查询IP地址所在国家与地区的类文件是IpLocation.class.php,位于ThinkPHP\Lib\ORG\Net目录下。类名是IpLocation,方法是 ...
  • 今天在搞JS(javascript)获取客户端IP的小程序,上网搜了下,好多在现在的系统和浏览器中的都无效,很无奈,在Chrome、FireFox中很少搞到直接利用ActiveX获取IP等的JS脚本。下面的代码是我在所有windowsNT5.0及以上...
  • 主要介绍了thinkphp如何正确获取客户端IP,除了使用内置get_client_ip函数,还有没有其他方法?请阅读下文揭晓答案。
  • 经过复杂的判断与算是的获取IP地址函数 复制代码 代码如下: function getIP() { if (getenv(‘HTTP_CLIENT_IP’)) { $ip = getenv(‘HTTP_CLIENT_IP’); } elseif (getenv(‘HTTP_X_FORWARDED_FOR’)) { $ip = ...
  • 复制代码 代码如下:function getip() { $IP=getenv(‘REMOTE_ADDR’); $IP_ = getenv(‘HTTP_X_FORWARDED_FOR’); if (($IP_ != “”) && ($IP_ != “unknown”)) $IP=$IP_; return $IP; } 下面这个比较好的复制代码...
  • 知道如何通过java获取客户端ip地址?若不会,我手把手教你,超级详细,相信我能把你教会。

    👨‍🎓作者:bug菌

    ✏️博客:CSDN掘金

    💌公众号:猿圈奇妙屋

    🚫特别声明:原创不易,转载请附上原文出处链接和本文声明,谢谢配合。

    🙏版权声明:文章里可能部分文字或者图片来源于互联网或者百度百科,如有侵权请联系bug菌处理。

    一、前言🔥

    环境:jdk1.8 + idea2019.3 + Windows10

    二、摘要 🔥

            项目开发中,在日常处理操作日志时,基本都会通过aop切面来实现用户操作日志的记录,但涉及到记录操作日志,想必肯定会有一项是基本都会参考记录的,那就是操作人的客户端ip地址,日后查"脏"也方便。

            那么问题来了。具体怎么获取客户端的ip地址啊?哈哈哈,这就是我这期的教学内容,若是有的小伙伴知道怎么获取,那么我要表扬你,但是实现思路是否与我有同异?所以你也可以尝试看下bug菌是如何实现的吧。

            接下来,我就开始教学啦,你们可得用心听。

     三、java实现获取客户端ip 🔥

    第一步:我们先来定义一个工具类,专门用于封装ip相关的方法类。

    package com.example.review.util;
    
    import org.apache.commons.lang3.StringUtils;
    import javax.servlet.http.HttpServletRequest;
    
    /**
     * ip相关工具类
     *
     * @Author luoYong            
     * @Date 2022-03-30 17:16        
     */
    public class IpUtils {
    
    
    }

     第二步:也就是此期教学的核心所在了,那究竟怎么获取客户端ip呢?我也就不卖关子了。

            通常获取客户端的IP地址都是通过 request.getRemoteAddr() ,对吧,但是你有想过么,如今基本系统都会进行域名代理等,比如通过 Apache,Squid 等反向代理软件,使用getRemoteAddr() 根本无法再获取到客户端的真实 IP 地址了。

            为什么加了代理就获取不到了呢?这是因为在客户端和服务之间增加了中间代理,因此服务器是无法直接拿到客户端的 IP地址,服务器端应用也无法直接通过转发请求的地址返回给客户端,基本这种获取方式就直接被pass掉了。

            如果还不理解,可以看下下边的代理流程示意图,你就会理解啦。

            如果只局限系统不做代理,那肯定是ok的。那系统基本不可能不做代理的呀,所以咋办?别着急,我会告诉你怎么玩儿,如果使用了我的教学方法还获取不到,请你来揍我,好吧?

            如下是具体获取客户端ip方法类:仅供大家参考。

        /***
         * 获取客户端ip地址
         * @param request
         */
        public static String getIP(final HttpServletRequest request) throws Exception {
            if (request == null) {
                throw (new Exception("getIpAddr method HttpServletRequest Object is null"));
            }
            String ipStr = request.getHeader("x-forwarded-for");
            if (StringUtils.isBlank(ipStr) || "unknown".equalsIgnoreCase(ipStr)) {
                ipStr = request.getHeader("Proxy-Client-IP");
            }
            if (StringUtils.isBlank(ipStr) || "unknown".equalsIgnoreCase(ipStr)) {
                ipStr = request.getHeader("WL-Proxy-Client-IP");
            }
            if (StringUtils.isBlank(ipStr) || "unknown".equalsIgnoreCase(ipStr)) {
                ipStr = request.getRemoteAddr();
            }
    
            // 多个路由时,取第一个非unknown的ip
            final String[] arr = ipStr.split(",");
            for (final String str : arr) {
                if (!"unknown".equalsIgnoreCase(str)) {
                    ipStr = str;
                    break;
                }
            }
            //目的是将localhost访问对应的ip 0:0:0:0:0:0:0:1 转成 127.0.0.1。
            return ipStr.equals("0:0:0:0:0:0:0:1") ? "127.0.0.1" : ipStr;
        }

             需要注意的是,自己本地开发,基本都是通过使用 [ localhost ]标准主机名来进行接口访问的,对吧,那么你就会特别好奇,数据库记录日志 ip 这一栏,ip有的竟然是 0:0:0:0:0:0:0:1

            为什么获取到的ip是这样呢?这是因为 0:0:0:0:0:0:0:1 是[ ipv6 ]的表现形式,对应[ ipv4 ]来说相当于127.0.0.1,也就是本机。所以我在最后通过三目运算强行把ipv6地址转成了ipv4地址。这样讲大家可否能理解?不理解就回头好好恶补一下计算机网络,这也不是不可以。

            如下分别是通过 localhost 及实际ip分别进行接口访问,数据库保存的操作日志记录。

    附上获取本地ip数据库截图:

             好啦,以上就是的通过java实现获取客户端ip的全部教学啦。如果对你有所帮助,还请不要忘记给bug菌[ 三连支持 ]哟。如果想获得更多的学习资源或者想和更多的技术爱好者一起交流,可以关注我的公众号『猿圈奇妙屋』,后台回复关键词领取学习资料、大厂面经、面试模板等海量资源,就等你来拿。


    四、文末🔥

            如果你还想要学习更多,小伙伴们大可关注bug菌专门为你们创建的专栏《java实战教学》,手把手教你如何玩转 java语言!我用双手成就你的梦想。​ 

           我是bug菌,一名想走👣出大山改变命运的程序猿。接下来的路还很长,都等待着我们去突破、去挑战。来吧,小伙伴们,我们一起加油!未来皆可期,fighting!

            最后送大家两句我很喜欢的话,与诸君共勉!


    ☘️做你想做的人,没有时间限制,只要愿意,什么时候都可以start。

    🍀你能从现在开始改变,也可以一成不变,这件事,没有规矩可言,你可以活出最精彩的自己。


    ​​​

    💌如果文章对您有所帮助,就请留下您的吧!(#^.^#);

    💝如果喜欢bug菌分享的文章,就请给bug菌点个关注吧!(๑′ᴗ‵๑)づ╭❤~;

    💗如果对文章有任何疑问,还请文末留言或者加群吧【QQ交流群:708072830】;

    💞鉴于个人经验有限,所有观点及技术研点,如有异议,请直接回复参与讨论(请勿发表攻击言论,谢谢);

    💕版权声明:原创不易,转载请附上原文出处链接和本文声明,版权所有,盗版必究!!!谢谢。

    展开全文
  • java获取客户端IP地址工具类

    千次阅读 2021-11-01 15:19:15
    代码如下自取: import lombok.extern.slf4j.Slf4j; ... import java.net.InetAddress;... * @Title 获取客户端ip地址类 * @Author YangWanJie * @Date 2021/6/30 16:08 * @versioin V1.0 **/ @Slf

    代码如下自取:

    import lombok.extern.slf4j.Slf4j;
    
    import javax.servlet.http.HttpServletRequest;
    import java.net.InetAddress;
    import java.net.UnknownHostException;
    
    /**
     * @Title 获取客户端ip地址类
     * @Author YangWanJie
     * @Date 2021/6/30 16:08
     * @versioin V1.0
     **/
    @Slf4j
    public class IpUtil {
    
        /**
         * @Title 获取用户IP地址
         * 两种可能性
         * 一:客户端未经过代理,直接访问服务器端;
         * 二:客户端通过多级代理,最终到达服务器端;
         * @Author YangWanJie
         * @Date 2020/1/20 10:57
         * @versioin V1.0
         **/
        public static String getIp(HttpServletRequest request) {
            // 反向代理时获取真实ip
            String ip = request.getHeader("X-Forwarded-For");
            if (ip != null && ip.length() != 0 && !"unknown".equalsIgnoreCase(ip)) {
                // 多次反向代理后会有多个ip值,第一个ip才是真实ip
                if (ip.indexOf(",") > 0) {
                    ip = ip.split(",")[0];
                }
            }
            //Proxy-Client-IP/WL- Proxy-Client-IP :这个一般是经过apache http服务器的请求才会有,用apache http做代理时一般会加上Proxy-Client-IP请求头,而WL-Proxy-Client-IP是他的weblogic插件加上的头。
            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");
            }
            //nginx代理一般会加上此请求头
            if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
                ip = request.getHeader("X-Real-IP");
            }
            if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
                ip = request.getRemoteAddr();
                if ("127.0.0.1".equals(ip) || "0:0:0:0:0:0:0:1".equals(ip)) {
                    //根据网卡取本机配置的IP
                    InetAddress inet = null;
                    try {
                        inet = InetAddress.getLocalHost();
                        ip = inet.getHostAddress();
                    } catch (UnknownHostException e) {
                        log.error("x-forwarded-for:{},Proxy-Client-IP:{},WL-Proxy-Client-IP:{},HTTP_CLIENT_IP:{},X-Real-IP:{},错误信息:{}", request.getHeader("X-Forwarded-For"), request.getHeader("Proxy-Client-IP"), request.getHeader("WL-Proxy-Client-IP"), request.getHeader("HTTP_CLIENT_IP"), request.getHeader("X-Real-IP"), e.getMessage());
                    }
                }
            }
            return ip;
        }
    }
    
    展开全文
  • I am trying to develop a Java web application (Servlet) which I need to get clients IP address.Please do not considers this as a duplicate question because I tried all the possible answers that are av...

    I am trying to develop a Java web application (Servlet) which I need to get clients IP address.

    Please do not considers this as a duplicate question because I tried all the possible answers that are available in the stackoverflow.

    Following is my code so far:

    1)

    String ipAddress = request.getRemoteAddr();

    In this case most of the tome I get the 'Default gateway adress'(147.120.1.5). not my machine ip address(174.120.100.17).

    2)

    String ipAddress = request.getHeader("X-FORWARDED-FOR");

    if (ipAddress == null) {

    ipAddress = request.getRemoteAddr();

    }

    In this case most of the tome I get the 'Default gateway adress'(147.120.1.5). not my machine ip address(174.120.100.17).

    3)

    InetAddress IP=InetAddress.getLocalHost();

    System.out.println(IP.getHostAddress());

    In this case I got the server IP Address(147.120.20.1).

    My IP address in 147.120.100.17.Now I don't know how to get the real client IP address. Please make an answer.

    Thank you very much.

    解决方案

    Try this one,

    String ipAddress = request.getHeader("X-FORWARDED-FOR");

    if (ipAddress == null) {

    ipAddress = request.getRemoteAddr();

    }

    展开全文
  • 获取客户端ip地址

    千次阅读 2020-08-20 14:59:46
    一般的系统都会要求获取客户端登录... * 获取客户端ip地址 * @param request * @return */ protected String getIP(HttpServletRequest request) { String ip = request.getHeader("x-forwarded-for"); if (ip .
  • 【IP地址获取】java获取客户端ip地址

    万次阅读 2018-08-31 16:44:38
    如何获取客户端ip和url访问中服务器端ip(如果是ip,不是域名)呢? String requestUrlIP = request.getServerName(); tring userIpAddr = request.getRemoteAddr(); System.out.println("***访问的Url中的...
  • JAVA如何获取客户端IP地址和MAC地址

    千次阅读 2020-12-20 09:47:26
    本文介绍了JAVA如何获取客户端IP...获取客户端IP地址public String getIp(HttpServletRequest request) throws Exception {String ip = request.getHeader("X-Forwarded-For");if (ip != null) {if (!ip.isEmpty() ...
  • Spring MVC –如何获取客户端IP地址

    千次阅读 2020-06-02 14:22:04
    在Spring框架中,您可以直接@Autowired在任何Spring托管Bean中直接使用HttpServletRequest ,然后再从请求标头中获取客户端IP地址。 WebUtils.java package com.mkyong.web; import org.springframework....
  • 在Java中,可以使用HttpServletRequest.getRemoteAddr()来获取正在访问Java Web应用程序的客户端IP地址。 import javax.servlet.http.HttpServletRequest; String ipAddress = request.getRemoteAddr(); 1....
  • php获取用户(客户端)真实IP地址的两种方法第一种方法,还算靠谱,本人以前一直用的是这个方法:function get_real_ip(){$ip=false;if(!empty($_SERVER['HTTP_CLIENT_IP'])){$ip=$_SERVER['HTTP_CLIENT_IP'];}if(!...
  • Http从request中获取客户端IP地址

    千次阅读 2021-04-09 22:58:27
    因为想记录客户端请求的IP地址,故记录如下所示 一、实现方式 实现方式主要分为以下两步 获取HttpServletRequest 直接看代码即可,如下所示: ServletRequestAttributes attributes = (ServletRequestAttributes)...
  • laravel获取客户端 IP 地址两种方式

    千次阅读 2021-02-09 11:11:15
    1 laravel自带方法获取客户端ip dd(request()->ip()); 2 自定义函数获取客户端IP <?php namespace App\Http\Controllers; class TestController extends Controller { public function ip() { dd($this...
  • js获取客户端ip

    千次阅读 2021-03-13 21:27:47
    js获取客户端ipjs获取客户端ip方法一:第三方接口方法二:利用WebRTC(Chrome/Firefox)方法三:求助后台大佬 js获取客户端ip 最近需要个需求,需要实现上次登录用户的IP及登录时间,如果两次登录ip不同,前端给出提示...
  • 最近刚完成的一个模块中,需要获取系统客户端IP地址与物理地址(MAC地址)。 获取的本机IP与MAC是服务器的,而非客户端的 通过JAVA获取,本机的IP地址与MAC地址,使用如下代码即可完成: package ...
  • 这篇文章主要介绍了js获取客户端IP地址、MAC和主机名的7个方法汇总,JS本身是不支持获取IP地址等信息的,本文通过其它方法实现,需要的朋友可以参考下 今天在搞JS(JavaScript)获取客户端IP的小程序,上网搜了下...
  • PHP获取客户端IP地址方式

    万次阅读 2019-06-11 09:34:11
    REMOTE_ADDR = 客户端IP HTTP_X_FORWARDED_FOR = 没数值或不显示 $ip = $_SERVER['REMOTE_ADDR']; 二、使用透明代理 REMOTE_ADDR = 最后一个代理服务器 IP HTTP_X_FORWARDED_FOR = 客户端真实 IP (经过多个代理...
  • PHP获取客户端IP,以下三种方法都可以获取IP地址 博客地址 Github function getip(){ if (getenv("HTTP_CLIENT_IP") &amp;&amp; strcasecmp(getenv("HTTP_CLIENT_IP"), "...
  • Abp 框架获取客户端IP地址

    千次阅读 2019-04-12 13:26:44
    发现网上很少有写Abp框架中如何获取客户端IP地址(非代理,这里只考虑普通情况) 由于Abp采用Ioc方式,我们只需要在需要的AppService类中的构造参数中加上IClientInfoProvider就可以使用了. namespace Demo { ...
  • 在ASP.NET Core 2.x中获取客户端IP地址

    千次阅读 2020-03-07 08:35:00
    在ASP.NET中,可以通过以下方式获取客户端IP地址。 HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"] 但这不适用于ASP.NET Core 2.0。我们需要一种不同的方法来检索HTTP请求信...
  • 随着ASP.NET的发展,有不同的方式从请求中访问客户端IP地址。WebForms和MVC Web应用程序只是访问当前HTTP上下文的请求。 var ip = HttpContext.Current.Request.UserHostAddress; 或者只是直接引用当前的...
  • System.out.println(“Connection from==>” + addr.getHostName() + “/t” + addr.getHostAddress()); } } catch (IOException e) { e.printStackTrace(); } } } TCP客户端: package com.wodwl.example; import ...
  • golang 获取客户端IP

    千次阅读 2020-09-11 16:53:57
    // RemoteIp 返回远程客户端IP,如 192.168.1.1 func RemoteIp(req *http.Request) string { remoteAddr := req.RemoteAddr if ip := exnet.ClientPublicIP(req); ip != "" { remoteAddr = ip } else

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 184,236
精华内容 73,694
关键字:

如何获取客户端ip地址getip