如何获取请求端真实IP和远程主机IP详解
如何获取请求端真实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详解相关推荐
- 一个获取ip地址的命令详解
今天在看师兄写的一个安装脚本文件,虽然之前学了不少bash知识.不是太熟练,打算练练手,可是这个命令折磨了我好久.索性花点时间把它弄清楚.awk这个工具语言的难度,我是体会到了.写正则表达式的都是什么 ...
- 太阳动态ip代理为您详解使用代理ip常见的几个关键点及其解决方案
一个ip支撑不了整个爬虫项目的运营,因此程序员常需要建立代理ip池或者与第三方代理ip软件打交道.作为优质的代理ip服务商,太阳动态ip代理为您详解使用代理ip常见的几个关键点及其解决方案. IP检验 ...
- php 自动获取头像,PHP_WordPress中用于获取及自定义头像图片的PHP脚本详解,get_avatar()(获取头像)
get_avat - phpStudy...
WordPress中用于获取及自定义头像图片的PHP脚本详解 get_avatar()(获取头像)get_avatar() 函数用来获取置顶邮箱或者用户的头像代码,在评论列表中非常常用. 这个函数提供 ...
- java 获取用户的MAC地址多种方法实例详解
java 获取用户的MAC地址多种方法实例详解 这篇文章主要介绍了JAVA实现获取用户的MAC地址的多种方法实例,需要的朋友可以参考下 java实现获取用户的MAC地址方法: 方法一:将本机地址与局域 ...
- axios请求接口http_使用axios请求接口,几种content-type的区别详解
axios的使用 安装(一般使用框架的话, 脚手架都集成了) $ npm install axios 请求示例 // POST axios.post('/user', { firstName: 'Fr ...
- xpath 取标签下所有文字内容_对Xpath 获取子标签下所有文本的方法详解
对Xpath 获取子标签下所有文本的方法详解 在爬虫中遇见这种怎么办 想提取名称, 但是 名称不在一个标签里 使用xpath string()方法 例如 data.xpath("string ...
- 关于大小端、位域的一些概念详解
关于大小端.位域的一些概念详解 我们常用的x86结构都是小端模式,而大部分DSP,ARM也是小端模式,不过有些ARM是可以选择大小端模式.所以对于上面的maxHeight是应该以小端模式来存放,具体情 ...
- 移动端实时音视频直播技术详解(一):开篇
移动端实时音视频直播技术详解(一):开篇 1.引言 随着互联网用户消费内容和交互方式的升级,支撑这些内容和交互方式的基础设施也正在悄悄发生变革.手机设备拍摄视频能力和网络的升级催生了大家对视频直播领域 ...
- Aurora ip核的使用详解
Aurora ip核的使用详解 前言 近期完成了Aurora的光纤传输的单板验证,以及在集成其他模块完成数据从FPGA上通过PCIE传到上位机,对该IP核的使用有一定的了解,在此用自己的经验以简洁的语 ...
最新文章
- The HipHop Virtual Machine
- Go web之旅(路由篇)
- 决策实验(1)——分钱任务
- JS 提交form表单
- mfc cedit 默认显示内容_拼多多评价不显示的几大原因,看完之后才知道是触碰了这几个环节...
- android线程间通信的几种方法_Android 技能图谱学习路线
- linux 测试程序性能,推荐一款Linux系统的性能测试软件
- 数据结构之线段树合并——永无乡,Lomsat gelral,Tree Rotations,Tree Rotations Escape Through Leaf
- java 封箱_java封箱和拆箱分析
- 【技巧】搜狗输入法特殊技巧
- echarts中矢量图片路径设置
- fat linux 链接,FAT格式磁盘镜像制作方法
- 基础集合论 第一章 9 幂集
- Egg.js框架的简单使用
- 自然语言处理NLP星空智能对话机器人系列:理解语言的 Transformer 模型-子词分词器
- 【Web 开发】第1章 概论
- android 6.0长截屏,网页长截图app
- robotstudio工作站建立
- “槑囧圐圙”您认得这些汉字吗?
- 2022.10.13(四)[仿写《百草园到三味书屋》第二段]
热门文章
- 20年前,我用川普视频月入5万
- 使用域名邮箱发送邮件
- 韩国WA15-6819B高性能DSP数字功放芯片
- 上方网首发:TestBird《2015年度手游测试白皮书》
- vue3加载动态图片
- Frida-Dexdump 脱壳工具下载使用以及相关技术介绍
- php表单设置出生日期,纯JS实现出生日期[年月日]下拉菜单效果_茜茜_前端开发者...
- android 抠图功能吗,抠图宝(抠图宝.和图)V10.01 安卓版
- 微信公众号开发使用测试号不能测试支付接口的解决方案
- php反序列化漏洞 freebuf,入门Web需要了解的PHP反序列化漏洞