当前位置:首页 > 服务端 > 伪造Http请求IP地址

伪造Http请求IP地址

2022年09月16日 19:07:51服务端4

在项目开发中(web项目),我负责的系统(简称PC),需要调其它系统接口,并且该系统需要获取客户端(浏览器访问端)的IP地址,给我愁死了,

正常流程:浏览器---访问PC系统----PC系统需要调第三方系统,此时默认情况下,PC发起的request请求IP地址是PC所在服务器的IP地址,而不是请求浏览器端的IP地址

所以,就想着是否能把request里的IP地址给修改了,因为在PC系统里是能获取到请求IP地址的,结果是修改不了

最后了解到:可以在http请求头里,追加一个头信息(名称:x-forwarded-for),它会位于原始IP地址之前,所以当第三方系统获取地址时,就获取到了真实的浏览器访问地址IP了

代码如下:

package com.sh.portal.framework.client.http;

import java.io.IOException;

import org.apache.commons.lang.StringUtils;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.message.BasicHeader;
import org.apache.http.protocol.HTTP;
import org.apache.http.util.EntityUtils;
import org.springframework.stereotype.Component;

import com.sh.portal.framework.client.RemoteServerArgs;
import com.sh.portal.framework.client.RemoteServerClient;
import com.sh.portal.framework.client.RemoteServerResponse;
import com.sh.portal.util.CommonUtils;


@Component
public class RemoteServerClientImpl implements RemoteServerClient {
    
    private static final String DEFAULT_ENCODE = "UTF-8";
    
    private static final String APPLICATION_JSON = "application/json";
    
    @Override
    public RemoteServerResponse post(RemoteServerArgs args) throws IOException {
        String ip = CommonUtils.getRequestIpAddress();
        // 创建HttpClientBuilder  
        HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();
        
        // HttpClient
        CloseableHttpClient closeableHttpClient = httpClientBuilder.build();
        // 请求参数
        StringEntity entity = new StringEntity(args.getRequestJson(), DEFAULT_ENCODE);
        entity.setContentEncoding(new BasicHeader(HTTP.CONTENT_TYPE, APPLICATION_JSON));
        HttpPost httpPost = new HttpPost(args.getUrl());  
        httpPost.addHeader(HTTP.CONTENT_TYPE, APPLICATION_JSON);
        //此处区别PC终端类型
        httpPost.addHeader("typeFlg", "9");
        //此处增加浏览器端访问IP
        if(!ip.equals("")){
            httpPost.addHeader("x-forwarded-for",ip);
        }
        httpPost.setEntity(entity);
        httpPost.setConfig(RequestConfig.DEFAULT);
        
        HttpResponse httpResponse;  
        // post请求  
        httpResponse = closeableHttpClient.execute(httpPost);
        HttpEntity httpEntity = httpResponse.getEntity();
        RemoteServerResponse response;
        if (httpEntity != null) {
            response = new RemoteServerResponse(httpResponse.getStatusLine().getStatusCode(), 
                EntityUtils.toString(httpEntity, DEFAULT_ENCODE));
        } else {
            response = new RemoteServerResponse(httpResponse.getStatusLine().getStatusCode(), 
                    StringUtils.EMPTY);
        }
        //释放资源  
        closeableHttpClient.close();  
        return response;
    }

}

原作者:https://www.cnblogs.com/holdon521/p/4686849.html

 

作者:海底月
来源链接:https://www.cnblogs.com/qi2332356/p/11022577.html

版权声明:
1、JavaClub(https://www.javaclub.cn)以学习交流为目的,由作者投稿、网友推荐和小编整理收藏优秀的IT技术及相关内容,包括但不限于文字、图片、音频、视频、软件、程序等,其均来自互联网,本站不享有版权,版权归原作者所有。

2、本站提供的内容仅用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯相关权利人及本网站的合法权利。
3、本网站内容原作者如不愿意在本网站刊登内容,请及时通知本站(javaclubcn@163.com),我们将第一时间核实后及时予以删除。


本文链接:https://www.javaclub.cn/server/42360.html

标签: HTTP
分享给朋友:

“伪造Http请求IP地址” 的相关文章

计算机网络基础必备(三次握手,四次握手,以及HTTP协议相关)

计算机网络基础必备(三次握手,四次握手,以及HTTP协议相关)

目录 一、计算机网络 通信协议 网络模型 二、TCP/IP...

SpringBoot 拦截器获取http请求参数

SpringBoot 拦截器获取http请求参数

SpringBoot 拦截器获取http请求参数—— 所有骚操作基础 目录 SpringBoot 拦截器获取http请求参数—— 所有骚操作基础 获取http请求参数是一种刚需 定义拦截器获取请求...

okhttp Fatal Exception thrown on Scheduler.Worker thread问题解决

我在项目里面同时使用了以下两个类库: compile 'com.squareup.okhttp3:logging-interceptor:3.3.1' compile 'com.squareup.okhttp3:okhttp:3.5.0' 编译时没有错误,但是一调用...

Android网络请求获取不到数据,retrofit2.HttpException: HTTP 400

网络请求数据的时候,一直获取不到数据 try { val url = params.key ?: EStudyService.BOOK_URL ... } catch (e: Exception) {...

Springboot 实现 Restful 服务,基于 HTTP / JSON 传输

Springboot 实现 Restful 服务,基于 HTTP / JSON 传输

“怎样的人生才是没有遗憾的人生?我的体会是:(1)拥有健康;(2)创造“难忘时刻”;(3)尽力做好自己,不必改变世界;...

RabbitMQ安装后无法访问https://localhost:15672/ 控制台问题解决

1.安装完后 我们进入到我们安装到 sbin目录C:\Program Files\RabbitMQ Server\rabbitmq_server-3.7.2\sbin执行:rabbitmq-plugins enable rabbitmq_management ...

Chrome Uncaught Error: NETWORK_ERR: XMLHttpRequest Exception 101

Chrome中有时Ajax请求会出现这种错误“Uncaught Error: NETWORK_ERR: XMLHttpRequest”。   出现这类情况大概有这几种: 1:Web页面中请求本地文件数据【如请求的url:file:///c://1.txt】...

RabbitMQ 启用 rabbitmq-auth-backend-http鉴权

查看运行中的容器 # docker ps 进入容器 # docker exec -it <RabbitMq容器ID> /bin/bash 启用插件 输入以下命令查看所有插件: # sudo rabbitm...

微信开发的Http或Https常用工具类

前不久写了几篇有关微信定制开发的文章并整理成了专题,里面所有的文档都提到了CommonUtil这个工具类,关于这个工具类原本有写但是不是每篇博客都有,所以就有人找我要这个工具类,评论里也有好多人说不知道这个工具类怎么写,因此针对这些疑问就特意给大家贴一下代码 1  ...

HTTP Session、Cookie机制详解

一、什么是http session,有什么用 HTTP协议本身是无状态的,本身并不能支持服务端保存客户端的状态信息,于是,Web Server中引入了session的概念,用来保存客户端的状态信息。  这 里用一个形象的比喻来解释session的工作方式。假设We...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。