java代码获取服务器ip,java获取IP地址

  java代码获取服务器ip,java获取IP地址

  00-1010 1.前言2。摘要3。获取客户端ip的java实现

  

目录

环境:JDK 1.8 idea 2019.3 windows 10

 

  在00-1010项目的开发过程中,aop部分基本上是用来记录用户在日常处理中的操作日志。但是说到记录操作日志,基本上要有一项是要参考和记录的,那就是运营商的客户端ip地址。以后查‘脏’也方便。

  那么问题来了。如何获取客户端的ip地址?呵呵,这是我这期的教学内容。如果有朋友知道怎么得到,那我就夸你,但是实现思路和我一样吗?所以你也可以试着看看bug菌是怎么实现的。

  接下来,我要开始教书了。你必须仔细听。

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

  包com . example . review . util;导入org . Apache.commons . lang 3 . string utils;导入javax . servlet . http . http servlet request;/** * ip相关工具* * @ authorluoyong * @ date 2022-03-3017336016 */公共课ip utils { }第二步:是本期教学的核心,那么如何获取客户端IP呢?我不会卖关子的。

  通常,客户端的IP地址是通过 request.getRemoteAddr() ,获得的,对吗?但是你有没有想过?现在基本系统都会进行域名代理等。比如通过Apache、Squid等反向代理软件,使用getRemoteAddr()无法获取客户端的真实IP地址。

  为什么加了代理就拿不到了?这是因为在客户端和服务之间增加了一个中间代理,所以服务器无法直接获取客户端的IP地址,服务器端应用也无法通过转发请求的地址直接返回给客户端。基本上,这种采集方法是直接传过去的。

  如果你还是不明白,可以看看下面的代理流程图,你就明白了。

  如果只是体制有限,不做代理,肯定是可以的。系统基本不可能不做代理,那怎么办?别担心,我会告诉你怎么玩。如果你用我的教学方法得不到,请打我,好吗?

  以下是获取客户端ip的具体方法类:仅供参考。

  /* * * *获取客户端ip地址* @ paramrequest */public静态字符串getip (final HTTP servlet request请求)throw Exception { if(request==null){ throw(new Exception( getIpAddr方法HTTP servlet request对象为null ));} String ipStr=request . get header( x-forwarded-for );if(string utils . is blank(ipStr) unknown 。equalsIgnoreCase(ipStr)){ ipStr=request . get header( Proxy-Client-IP );} if(string utils . is blank(ipStr) unknown 。equalsIgnoreCase(ipStr)){ ipStr=request . get header( WL-代理-客户端-IP );} if(string utils . is blank(ipStr) unknown 。equalsIgnoreCase(ipStr)){ ipStr=request . getremote addr();}//多路由的情况下,取第一个未知的ip最终字符串[] arr=ipStr.split(,);for(最终字符串str : arr) { if(!“未知”。equalsIgnoreCase(str)){ ipStr=str;打破;} }//目的是将localhost访问对应的IP 0:0:0:033:033:033600336003360033601转换为127.0.0.1。return ipstr . equals( 0:0:033600:0:03:033600:01 )?127 . 0 . 0 . 1’: ipStr;}需要注意的是,你在本地开发的时候,基本都是用[localhost]标准主机名来访问接口的吧?然后你会特别好奇。在数据库记录日志ip一栏中,有些ip实际上是0:0:0:0333:03333:0333333333333333333331。

  为什么被收购的ip会这样?这是因为0:0:0:0:0:033:033601是[ipv6]的表达式,对应[ipv4],相当于127.0.0.1,即本地计算机。所以最后我通过三元运算把ipv6地址强制转换成ipv4地址。你能理解这个吗?如果不懂,回去补计算机网络也不是不可以。

  下面是分别通过localhost和实际ip访问接口,存储在数据库中的操作日志记录。

  附上本地ip数据库的截图:

  好了,通过java获取客户端ip的教学到此结束。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: