java 伪造http请求ip地址的方法

最近做接口开发,需要跟第三方系统对接接口,基于第三方系统接口的保密性,需要将调用方的请求IP加入到他们的白名单中。由于我们公司平常使用的公网的IP是不固定的,每次都需要将代码提交到固定的服务器上(服务器IP加入了第三方系统的白名单),频繁的修改提交合并代码和启动服务器造成了额外的工作量,给接口联调带来了很大的阻碍。

正常的http请求

我们正常发起一个http的请求如下:

  import org.apache.http.HttpEntity;
  import org.apache.http.client.config.RequestConfig;
  import org.apache.http.client.methods.CloseableHttpResponse;
  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.HttpClients;
  import org.apache.http.util.EntityUtils;

  public static String getPost4Json(String url, String json) throws Exception {
    CloseableHttpClient httpClient = HttpClients.createDefault();
    HttpPost httpPost = new HttpPost(url);
    /* 设置超时 */
    RequestConfig defaultRequestConfig = RequestConfig.custom().setSocketTimeout(5000).setConnectTimeout(5000).setConnectionRequestTimeout(5000).build();
    httpPost.setConfig(defaultRequestConfig);
    httpPost.addHeader("Content-Type", "application/json;charset=UTF-8");
    httpPost.setEntity(new StringEntity(json, "UTF-8"));
    CloseableHttpResponse response = null;
    String result = null;
    try {
      response = httpClient.execute(httpPost);
      HttpEntity entity = response.getEntity();
      result = EntityUtils.toString(entity, "UTF-8");
    } catch (Exception e) {
      throw e;
    } finally {
      if (response != null) response.close();
      httpClient.close();
    }
    return result;
  }

由于没有加入白名单的原因,这样的请求显然无法调用到第三方的接口。这时候考虑能否将请求的ip改为白名单的一个ip,服务器在解析时拿到的不是正常的ip,这样能否正常调用呢?

伪造http请求ip地址

我们知道正常的tcp/ip在通信过程中是无法改变源ip的,也就是说电脑获取到的请求ip是不能改变的。但是可以通过伪造数据包的来源ip,即在http请求头加一个x-forwarded-for的头信息,这个头信息配置的是ip地址,它代表客户端,也就是HTTP的请求端真实的IP。因此在上面代码中加上如下代码:

httpPost.addHeader("x-forwarded-for",ip);

服务端通过x-forwarded-for获取请求ip,并且校验IP安全性,代码如下:

String ip = request.getHeader("x-forwarded-for");

总结

通过请求头追加x-forwarded-for头信息可以伪造http请求ip地址。但是若服务器不直接信任并且不使用传递过来的 X-Forward-For 值的时候伪造IP就不生效了。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • java模拟http的Get/Post请求,并设置ip与port代理的方法

    本文涉及3个基本点: 1.因为很多公司的内网都设有代理,浏览器通过ip与port上网,而java代码模拟http get方式同样需要外网代理: 2.Java实现http的Get/Post请求代码: 3.主要是设置HttpURLConnection请求头里面的属性 比如Cookie.User-Agent(浏览器类型)等等. 比如:http请求中添加Header conn.setRequestProperty("Authorization", authorization); 注:我就在网上

  • java 伪造http请求ip地址的方法

    最近做接口开发,需要跟第三方系统对接接口,基于第三方系统接口的保密性,需要将调用方的请求IP加入到他们的白名单中.由于我们公司平常使用的公网的IP是不固定的,每次都需要将代码提交到固定的服务器上(服务器IP加入了第三方系统的白名单),频繁的修改提交合并代码和启动服务器造成了额外的工作量,给接口联调带来了很大的阻碍. 正常的http请求 我们正常发起一个http的请求如下: import org.apache.http.HttpEntity; import org.apache.http.clie

  • JAVA获得域名IP地址的方法

    本文实例讲述了JAVA获得域名IP地址的方法.分享给大家供大家参考.具体如下: import java.net.InetAddress; import java.net.UnknownHostException; public class TestInetAddress { InetAddress myIpAddress = null; InetAddress[] myServer = null; public static void main(String args[]) { TestInet

  • Java 根据网址查询DNS/IP地址的方法

    需求: 给定一个URL地址, 例如: http://www.cncounter.com/tools/shorturl.php, 解析对应的IP地址和端口号. 说明: 本文不涉及底层的 DNS 协议, 直接使用Java平台提供的API进行操作. DNS也就是 Domain Name Service,即 域名服务. 我们知道, Java中与网址有关的类包括 java.net.URL 和 java.net.URI 等, 其中 URI 是资源定位符, 可能包括 file: 之类的协议. 所以此处我们使用

  • Java获取本机IP地址的三种方法总结

    目录 1 获取局域网IP地址 2 获取全部 IPV4/IPV6 IP地址 3 获取全部存放本机IP地址 知识点补充 1 获取局域网IP地址 InetAddress.getLocalHost().getHostAddress(); 2 获取全部 IPV4/IPV6 IP地址 private static List<String> getIpAddress() throws SocketException { List<String> list = new LinkedList<

  • JAVA如何获取客户端IP地址和MAC地址

    本文介绍了JAVA如何获取客户端IP地址和MAC地址 ,分享给大家,具体如下: 1.获取客户端IP地址 public String getIp(HttpServletRequest request) throws Exception { String ip = request.getHeader("X-Forwarded-For"); if (ip != null) { if (!ip.isEmpty() && !"unKnown".equalsIg

  • Java获取客户端真实IP地址过程解析

    这篇文章主要介绍了Java获取客户端真实IP地址过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 业务背景 服务器端接收客户端请求的时候,一般需要进行签名验证,客户端IP限定等拦截,在进行IP限定的时候就需要获取客户端真实的IP. 基础知识 访问服务端的方式一般分为两种: 未经过代理,直接访问服务器端: 通过多级代理,最终到达服务器端(nginx,squid,haproxy). 客户端请求信息都包含在HttpServletRequest中

  • TCP Wrappers防火墙介绍与封锁IP地址的方法

    Tcp_Wrappers是一个用来分析TCP/IP封包的软件,类似的IP封包软件还有iptables,linux默认都安装了此软件,作为一个安全的系统,Linux本身有两层安全防火墙,通过IP过滤机制的iptables实现第一层防护,iptables防火墙通过直观地监视系统的运行状况,阻挡网络中的一些恶意攻击,保护整个系统正常运行,免遭攻击和破坏.如果通过了第一层防护,那么下一层防护就是tcp_wrappers了,通过Tcp_Wrappers可以实现对系统中提供的某些服务的开放与关闭.允许和禁止

  • PHP准确取得服务器IP地址的方法

    本文实例讲述了PHP准确取得服务器IP地址的方法.分享给大家供大家参考.具体分析如下: 在php中,我们一般通过$_SERVER['HTTP_HOST']来活得URL中网站的域名或者ip地址. php手册中的解释如下: "HTTP_HOST" 当前请求的 Host: 头信息的内容. 一般来说,这样子不会遇到什么问题,在一些常见的php框架中,如PFC3和FLEA也是基于该预定义变量. 然而最近在做的一个项目,程序移交到客户手里测试时,竟然发现程序的跳转总是会出错. 最后找出原因:$_S

  • C#编程获取IP地址的方法示例

    本文实例讲述了C#编程获取IP地址的方法.分享给大家供大家参考,具体如下: 1.获取客户端IP /// <summary> /// 获取客户端Ip /// </summary> /// <returns></returns> public String GetClientIp() { String clientIP = ""; if (System.Web.HttpContext.Current != null) { clientIP =

  • Android开发实现在Wifi下获取本地IP地址的方法

    本文实例讲述了Android开发实现在Wifi下获取本地IP地址的方法.分享给大家供大家参考,具体如下: 代码核心介绍: WifiManager类提供了对设备Wifi功能的管理,包括Wifi开关的打开和关闭,IP地址获取等等,早期的Android版本甚至支持对于IP的设置.在这里仅介绍其简单的一个小应用--获取IP地址. 首先先添加Uses-Permission:CHANGE_WIFI_STATE,WAKE_LOCK和ACCESS_WIFI_STATE.代码如下(AndroidManifest.

随机推荐