国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 開發(fā) > Java > 正文

java 偽造http請(qǐng)求ip地址的方法

2024-07-14 08:42:25
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

最近做接口開發(fā),需要跟第三方系統(tǒng)對(duì)接接口,基于第三方系統(tǒng)接口的保密性,需要將調(diào)用方的請(qǐng)求IP加入到他們的白名單中。由于我們公司平常使用的公網(wǎng)的IP是不固定的,每次都需要將代碼提交到固定的服務(wù)器上(服務(wù)器IP加入了第三方系統(tǒng)的白名單),頻繁的修改提交合并代碼和啟動(dòng)服務(wù)器造成了額外的工作量,給接口聯(lián)調(diào)帶來(lái)了很大的阻礙。

正常的http請(qǐng)求

我們正常發(fā)起一個(gè)http的請(qǐng)求如下:

  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);    /* 設(shè)置超時(shí) */    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;  }

由于沒(méi)有加入白名單的原因,這樣的請(qǐng)求顯然無(wú)法調(diào)用到第三方的接口。這時(shí)候考慮能否將請(qǐng)求的ip改為白名單的一個(gè)ip,服務(wù)器在解析時(shí)拿到的不是正常的ip,這樣能否正常調(diào)用呢?

偽造http請(qǐng)求ip地址

我們知道正常的tcp/ip在通信過(guò)程中是無(wú)法改變?cè)磇p的,也就是說(shuō)電腦獲取到的請(qǐng)求ip是不能改變的。但是可以通過(guò)偽造數(shù)據(jù)包的來(lái)源ip,即在http請(qǐng)求頭加一個(gè)x-forwarded-for的頭信息,這個(gè)頭信息配置的是ip地址,它代表客戶端,也就是HTTP的請(qǐng)求端真實(shí)的IP。因此在上面代碼中加上如下代碼:

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

服務(wù)端通過(guò)x-forwarded-for獲取請(qǐng)求ip,并且校驗(yàn)IP安全性,代碼如下:

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

總結(jié)

通過(guò)請(qǐng)求頭追加x-forwarded-for頭信息可以偽造http請(qǐng)求ip地址。但是若服務(wù)器不直接信任并且不使用傳遞過(guò)來(lái)的 X-Forward-For 值的時(shí)候偽造IP就不生效了。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持VeVb武林網(wǎng)。


注:相關(guān)教程知識(shí)閱讀請(qǐng)移步到JAVA教程頻道。
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 红安县| 敦煌市| 太仆寺旗| 晋州市| 土默特左旗| 科技| 永寿县| 临西县| 仙桃市| 龙川县| 富顺县| 德昌县| 礼泉县| 都江堰市| 阿坝| 江口县| 泸溪县| 定陶县| 宜宾市| 桐城市| 澄迈县| 柏乡县| 大理市| 新和县| 木兰县| 固原市| 邢台县| 彝良县| 富蕴县| 黔西| 东莞市| 达州市| 广水市| 北宁市| 任丘市| 姚安县| 毕节市| 玛沁县| 花莲县| 闽侯县| 乌兰县|