如何获取请求端真实IP和远程主机IP详解

  • 需求背景
  • 一、Remote_Addr
    • 情况 一:
    • 情况二:
    • java中获取Remote_Addr的api
  • 二、X-Forwarded-For
    • java中获取X-Forwarded-For的api为

需求背景

HTTP请求头中的Remote_Addr,X-Forwarded-For,X-Real-IP
我们在项目中有时需要获取请求端真实的IP,有时需要获取代理服务器的IP。
下面详细介绍如何获取。

一、Remote_Addr

Remote_Addr表示发出请求的远程主机IP。remote_addr代表客户端Ip,但它的值不是由客户端提供的,而是服务端根据客户端的ip指定的。
那我们如何理解这个呢?

情况 一:

当我们的使用A电脑浏览器访问网站时,假设中间没有任何代理,那么网站的web就会把remote_addr设置为A电脑的IP。

情况二:

如果使用了Nginx等代理,那么我们的浏览器会先访问这个代理,然后再由这个代理转发到网站,这样web服务器就会把remote_addr设置为这台代理机器的IP。(也就是Nginx所在的机器IP)。

java中获取Remote_Addr的api

通过HttpServletRequest来获取

      String remoteAddr = request.getRemoteAddr();

二、X-Forwarded-For

X-Forwarded-For代表客户端,也就是HTTP的请求端真实的IP,只有在通过了HTTP代理或者负载均衡服务器时才会添加该项。正如上面所说,当使用了代理时,web服务器就不知道你的真实IP了,为了避免这个情况,代理服务器通常会增加一个叫做X-Forwarded-For的头信息,把连接它的客户端IP(即你的上网机器IP)加到这个头信息里,这样就能保证网站的web服务器能获取到真实IP。
格式一般为:
X-Forwarded-For: 1.1.1.1,2.2.2.2,3.3.3.3
代表请求由1.1.1.1发出,这个第一个ip就是请求端真实IP。后面的都是代理层的IP。

java中获取X-Forwarded-For的api为

    private static String getIpAddr(HttpServletRequest request) {String ip = request.getHeader("x-forwarded-for");log.info("x-forwarded-for:"+ip);if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {ip = request.getHeader("Proxy-Client-IP");log.info("Proxy-Client-IP:"+ip);}if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {ip = request.getHeader("WL-Proxy-Client-IP");log.info("WL-Proxy-Client-IP:"+ip);}if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {ip = request.getRemoteAddr();log.info("unknown:"+ip);}if (StringUtils.isNotEmpty(ip) &&ip.indexOf(CharacterConst.SpecialSymbol.COMMA_SYMBOL) > 0) {String[] str = ip.split(CharacterConst.SpecialSymbol.COMMA_SYMBOL);ip = str[0];log.info("ip:"+ip);}return ip;}

X-Forwarded-For 和 X-Real-IP 的区别?

如何获取请求端真实IP和远程主机IP详解相关推荐

  1. 一个获取ip地址的命令详解

    今天在看师兄写的一个安装脚本文件,虽然之前学了不少bash知识.不是太熟练,打算练练手,可是这个命令折磨了我好久.索性花点时间把它弄清楚.awk这个工具语言的难度,我是体会到了.写正则表达式的都是什么 ...

  2. 太阳动态ip代理为您详解使用代理ip常见的几个关键点及其解决方案

    一个ip支撑不了整个爬虫项目的运营,因此程序员常需要建立代理ip池或者与第三方代理ip软件打交道.作为优质的代理ip服务商,太阳动态ip代理为您详解使用代理ip常见的几个关键点及其解决方案. IP检验 ...

  3. php 自动获取头像,PHP_WordPress中用于获取及自定义头像图片的PHP脚本详解,get_avatar()(获取头像) get_avat - phpStudy...

    WordPress中用于获取及自定义头像图片的PHP脚本详解 get_avatar()(获取头像)get_avatar() 函数用来获取置顶邮箱或者用户的头像代码,在评论列表中非常常用. 这个函数提供 ...

  4. java 获取用户的MAC地址多种方法实例详解

    java 获取用户的MAC地址多种方法实例详解 这篇文章主要介绍了JAVA实现获取用户的MAC地址的多种方法实例,需要的朋友可以参考下 java实现获取用户的MAC地址方法: 方法一:将本机地址与局域 ...

  5. axios请求接口http_使用axios请求接口,几种content-type的区别详解

    axios的使用 安装(一般使用框架的话, 脚手架都集成了) $ npm install axios 请求示例 // POST axios.post('/user', { firstName: 'Fr ...

  6. xpath 取标签下所有文字内容_对Xpath 获取子标签下所有文本的方法详解

    对Xpath 获取子标签下所有文本的方法详解 在爬虫中遇见这种怎么办 想提取名称, 但是 名称不在一个标签里 使用xpath string()方法 例如 data.xpath("string ...

  7. 关于大小端、位域的一些概念详解

    关于大小端.位域的一些概念详解 我们常用的x86结构都是小端模式,而大部分DSP,ARM也是小端模式,不过有些ARM是可以选择大小端模式.所以对于上面的maxHeight是应该以小端模式来存放,具体情 ...

  8. 移动端实时音视频直播技术详解(一):开篇

    移动端实时音视频直播技术详解(一):开篇 1.引言 随着互联网用户消费内容和交互方式的升级,支撑这些内容和交互方式的基础设施也正在悄悄发生变革.手机设备拍摄视频能力和网络的升级催生了大家对视频直播领域 ...

  9. Aurora ip核的使用详解

    Aurora ip核的使用详解 前言 近期完成了Aurora的光纤传输的单板验证,以及在集成其他模块完成数据从FPGA上通过PCIE传到上位机,对该IP核的使用有一定的了解,在此用自己的经验以简洁的语 ...

最新文章

  1. The HipHop Virtual Machine
  2. Go web之旅(路由篇)
  3. 决策实验(1)——分钱任务
  4. JS 提交form表单
  5. mfc cedit 默认显示内容_拼多多评价不显示的几大原因,看完之后才知道是触碰了这几个环节...
  6. android线程间通信的几种方法_Android 技能图谱学习路线
  7. linux 测试程序性能,推荐一款Linux系统的性能测试软件
  8. 数据结构之线段树合并——永无乡,Lomsat gelral,Tree Rotations,Tree Rotations Escape Through Leaf
  9. java 封箱_java封箱和拆箱分析
  10. 【技巧】搜狗输入法特殊技巧
  11. echarts中矢量图片路径设置
  12. fat linux 链接,FAT格式磁盘镜像制作方法
  13. 基础集合论 第一章 9 幂集
  14. Egg.js框架的简单使用
  15. 自然语言处理NLP星空智能对话机器人系列:理解语言的 Transformer 模型-子词分词器
  16. 【Web 开发】第1章 概论
  17. android 6.0长截屏,网页长截图app
  18. robotstudio工作站建立
  19. “槑囧圐圙”您认得这些汉字吗?
  20. 2022.10.13(四)[仿写《百草园到三味书屋》第二段]

热门文章

  1. 20年前,我用川普视频月入5万
  2. 使用域名邮箱发送邮件
  3. 韩国WA15-6819B高性能DSP数字功放芯片
  4. 上方网首发:TestBird《2015年度手游测试白皮书》
  5. vue3加载动态图片
  6. Frida-Dexdump 脱壳工具下载使用以及相关技术介绍
  7. php表单设置出生日期,纯JS实现出生日期[年月日]下拉菜单效果_茜茜_前端开发者...
  8. android 抠图功能吗,抠图宝(抠图宝.和图)V10.01 安卓版
  9. 微信公众号开发使用测试号不能测试支付接口的解决方案
  10. php反序列化漏洞 freebuf,入门Web需要了解的PHP反序列化漏洞