美文网首页
java web应用获取source ip问题

java web应用获取source ip问题

作者: nutz | 来源:发表于2016-02-02 13:22 被阅读0次

    要点:

    • sourceip获取方式有几种,getRemoteAddr获取的是公网ip
    • apache+tomcat时,通过proxy-http模块+getRemoteAddr获取ip存在问题
    • 手机开启了移动数据且连接wifi时,本机ip取的是运营商分配的ip,而不是wifi路由器给的

    应用获取客户端ip是一个常见的需求,像投票系统是比较典型的。ip是投票规则的重要组成部分。下面分两个部分来讨论这个话题。

    source ip 能否伪造

    http请求当中,ip理论上是无法伪造的。因为建立 TCP 连接需要三次握手,如果伪造了源 IP,无法建立 TCP 连接,更不会有后面的 HTTP 请求。但以下情况例外:

    • MITM攻击
    • 恶意程序控制了server的网络
    • 恶意程序伪造它所在网段的另一ip地址
    • BGP攻击
      通过以上描述,伪造源ip是一件比较困难的事情。

    apache+tomcat 如何获取source ip

    在java应用中,获取source ip一般通过request.getRemoteAddr()完成,这个一般没什么疑问,但有时,你会遇到问题。
    以apache+tomcat部署场景为例。apache做反向代理,tomcat为backend server。经测试发现:

    • 若通过proxy-http模块连接,则取出的ip为apache的ip;
    • 若通过proxy-ajp模块连接,则取出的ip为实际的远程ip;
      当你获取source ip发现有问题时,需要考虑下web server与中间件是否通过http方式连接。

    如果部署方式是基于http模块,又要获取source ip,此时应对web server做配置。参见 X-Forwarded-For

    相关文章

      网友评论

          本文标题:java web应用获取source ip问题

          本文链接:https://www.haomeiwen.com/subject/bvoskttx.html