我在写域名备份功能,想要修改请求的 IP 地址,同时又将原有的请求域名带上。实现方法是修改请求的地址,在 HttpRequestMessage 的 Header 上添加 HOST 记录,记录的值就是原有的域名。然而在开启 Fiddler 之后,将会发现实际发出的请求的 HOST 是实际请求的地址

预计这个是 Fiddler 的已知问题

我的实现方法是给 HttpRequestMessage 的 Headers 设置上 Host 的内容,接着修改 RequestUri 为某个 IP 地址,从而实现域名备份功能。域名备份是我为了解决国内诡异的网络环境的问题而引入的技术方案,域名备份的实现方法是运维将后台在多个地方提供访问入口,可选的是将后台在多个城市部署多套,或者只部署一套后台但是在其他城市提供可访问入口,如内部代理等方式。客户端拿到后台的多个访问域名,如果首选域名访问不通,则尝试使用备份的域名进行访问。甚至有时期望能绕过 DNS 污染,直接访问已知的后台 IP 访问后台

此时需要保持行为一致,让后台可以拿到的请求 Host 保持和原来一样。这就是本文所记录的问题的遇到的原因。我的代码如下:

        var httpRequestMessage = new HttpRequestMessage();
httpRequestMessage.Headers.Host = host;
httpRequestMessage.Method = HttpMethod.Post;
httpRequestMessage.RequestUri = new Uri(actualHost); using var httpClient = new HttpClient();
var httpResponseMessage = await httpClient.SendAsync(httpRequestMessage);

为了方便测试,我加上了测试使用的后台,测试后台的框架代码如下:

class TestHost : IDisposable
{
public TestHost(string host, WebApplication app)
{
Host = host;
App = app;
} public string Host { get; }
public WebApplication App { get; } public void Dispose()
{
App.DisposeAsync();
}
} static class TestHostBuilder
{
public static TestHost GetTestHost(Action<WebApplication> configure)
{
var port = GetAvailablePort();
var builder = WebApplication.CreateBuilder();
var host = $"http://127.0.0.1:{port}/";
builder.WebHost.UseUrls(host);
builder.Services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>(); var app = builder.Build(); configure(app); _ = app.RunAsync(); return new TestHost(host, app);
} public static int GetAvailablePort()
{
return GetAvailablePort(IPAddress.Loopback);
} /// <summary>
/// 获取一个可用端口
/// </summary>
/// <param name="ip"></param>
/// <returns></returns>
public static int GetAvailablePort(IPAddress ip)
{
using var socket = new Socket(SocketType.Stream, ProtocolType.Tcp);
socket.Bind(new IPEndPoint(ip, 0));
socket.Listen(1);
var ipEndPoint = (IPEndPoint) socket.LocalEndPoint!;
var port = ipEndPoint.Port;
return port;
}
}

测试后台是通过在本机开启一个随机的端口然后提供访问的方式,具体实现如下

        var host = "unknownaddressxxxxxxxxxxxasdxx.xxxxxx";

        using var testHost = TestHostBuilder.GetTestHost(app =>
{
app.MapPost("/", () =>
{
var httpContextAccessor = app.Services.GetRequiredService<IHttpContextAccessor>(); // 测试可以拿到域名
if (httpContextAccessor.HttpContext!.Request.Host.Host == host)
{
return "Return";
} return null;
});
});

以上使用 IHttpContextAccessor 可以拿到 HttpContext 对象,从而获取到请求的 Host 内容。上面测试代码写了一个叫 unknownaddressxxxxxxxxxxxasdxx.xxxxxx 的不存在的域名,期望能在测试的后台里面收到的请求使用此域名

修改调用的代码如下

        var httpRequestMessage = new HttpRequestMessage();
httpRequestMessage.Headers.Host = host;
httpRequestMessage.Method = HttpMethod.Post;
httpRequestMessage.RequestUri = new Uri(testHost.Host); using var httpClient = new HttpClient();
var httpResponseMessage = await httpClient.SendAsync(httpRequestMessage);
var result = await httpResponseMessage.Content.ReadAsStringAsync();
Console.WriteLine(result);

在开启了 Fiddler 抓包工具之后,抓到的请求如下

POST http://127.0.0.1:50662/ HTTP/1.1
Host: 127.0.0.1:50662
Content-Length: 0

测试后台收到的 Host 也是 127.0.0.1:50662 而不是期望的测试域名

关闭 Fiddler 抓包工具之后,在测试后台可以收到期望的测试域名

因此抓包工具 Fiddler 将会篡改请求的 Host 信息为请求的实际地址的域名。我不知道如何配置 Fiddler 禁用此行为,还请知道如何配置的大佬教教我

本文的测试代码放在githubgitee 欢迎访问

可以通过如下方式获取本文的源代码,先创建一个空文件夹,接着使用命令行 cd 命令进入此空文件夹,在命令行里面输入以下代码,即可获取到本文的代码

git init
git remote add origin https://gitee.com/lindexi/lindexi_gd.git
git pull origin 5066e8e0a494bfe571210bb3dfa748c27209e986

以上使用的是 gitee 的源,如果 gitee 不能访问,请替换为 github 的源。请在命令行继续输入以下代码

git remote remove origin
git remote add origin https://github.com/lindexi/lindexi_gd.git
git pull origin 5066e8e0a494bfe571210bb3dfa748c27209e986

获取代码之后,进入 HiwelairchawCekaywebeale 文件夹

dotnet 开启 Fiddler 抓包将会让请求 HOST 头被更改的更多相关文章

  1. Fiddler抓包-get与post请求

    from:https://www.cnblogs.com/yoyoketang/p/6719717.html 本篇以博客园的请求为例,简单分析get与post数据有何不一样,以后也能分辨出哪些是get ...

  2. Fiddler抓包1-抓firefox上https请求

    前言 fiddler是一个很好的抓包工具,默认是抓http请求的,对于pc上的https请求,会提示网页不安全,这时候需要在浏览器上安装证书. 一.网页不安全 1.用fiddler抓包时候,打开百度网 ...

  3. Fiddler抓包1-抓firefox上https请求【转载】

    本篇转自博客:上海-悠悠 原文地址:http://www.cnblogs.com/yoyoketang/p/6538021.html 前言 fiddler是一个很好的抓包工具,默认是抓http请求的, ...

  4. 不安装证书如何通过模拟器+Fiddler抓包APP的HTTPS请求?

    模拟器抓取https方法 说明:为了解决安卓手线上不能抓取https请求,以下整理通过模拟器抓取https请求方法如下:前置条件:安卓模拟器:夜神抓包工具:Fiddler汉化中文升级版1无需FIDDL ...

  5. [Fiddler] 开启Fiddler抓包的时候产品报“证书错误”

    报错截图: 解决办法:同时开启产品和Fiddler,做如下处理:

  6. fiddler抓包软件的使用--请求头--ajax

    User-Agent: FiddlerHost: localhost:49828Content-Length: 0Accept: application/xmlContent-Type: applic ...

  7. Python+Requests接口测试教程(1):Fiddler抓包工具

    本书涵盖内容:fiddler.http协议.json.requests+unittest+报告.bs4.数据相关(mysql/oracle/logging)等内容.刚买须知:本书是针对零基础入门接口测 ...

  8. fiddler抓包详解

    image.png 前言 fiddler是一个很好的抓包工具,默认是抓http请求的,对于pc上的https请求,会提示网页不安全,这时候需要在浏览器上安装证书. 一.网页不安全 1.用fiddler ...

  9. Fiddler抓包11-HTTPS证书Actions无法导出问题

    前言 在点Actions时候出现Export Failed:The root certificate could not be located.最近有很多小伙伴在fiddler导出证书的时候,遇到无法 ...

  10. Fiddler抓包3-查看get与post请求

    前言 前面两篇关于Fiddler抓包的一些基本配置,配置完之后就可以抓到我们想要的数据了,接下来就是如何去分析这些数据. 本篇以博客园的请求为例,简单分析get与post数据有何不一样,以后也能分辨出 ...

随机推荐

  1. 03.视频播放器Api说明

    03.视频播放器Api说明 目录介绍 01.最简单的播放 02.如何切换视频内核 03.切换视频模式 04.切换视频清晰度 05.视频播放监听 06.列表中播放处理 07.悬浮窗口播放 08.其他重要 ...

  2. .Net依赖注入神器Scrutor(下)

    前言 上一篇文章我们讲到了Scrutor第一个核心功能Scanning,本文讲解的是Scrutor第二个核心的功能Decoration 装饰器模式在依赖注入中的使用. 装饰器模式允许您向现有服务类中添 ...

  3. 记录--H5 实现拍照选景框效果

    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 背景 在实际项目中,遇到了需要唤起手机摄像头拍照的需求,最开始是通过<input type="file" hid ...

  4. 网站https 问题记录

    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 开发过程中 常见的 https 问题 - 避坑 做前端多年,发现有些问题需要重复解决很多次,浪费了不少时间,https 导致的问题就属于其 ...

  5. [Git]入门及其常用命令

    [版权声明]未经博主同意,谢绝转载!(请尊重原创,博主保留追究权) https://www.cnblogs.com/cnb-yuchen/p/17993832 出自[进步*于辰的博客] Git 的难点 ...

  6. [MySQL]流程控制语句

    [版权声明]未经博主同意,谢绝转载!(请尊重原创,博主保留追究权) https://www.cnblogs.com/cnb-yuchen/p/17991087 出自[进步*于辰的博客] 参考笔记三,P ...

  7. elementui树形表格分页

    效果图 如果你刚好需求中需要如上效果那么只需要吧代码复制过去直接用即可,注意写在nextTick中 前提是vue加elementui 代码如下 /**    *  树形表格分页    * @param ...

  8. KafkaConsumerDemo

    pom <dependency> <groupId>org.springframework.kafka</groupId> <artifactId>sp ...

  9. 分享本人依照NOI大纲整理的CSPJ复习资料

    2023 CSP-J 复习文件 考纲 复习好 : 基础知识与编程环境 难度 计算机的基本构成 计算机的组成及功能 - 知乎 (zhihu.com) 操作系统的基本概念与常见操作 操作系统基础知识大汇总 ...

  10. 千字干货分享:一文教你ABI增强分析,BI的未来就在这里!

    自2017年以来,智能概念开始出现,各类商业智能BI应用的使用门槛逐渐降低,商业智能BI制造商主要竞争增强分析的能力.<2020年Gartner分析与BI平台魔法象限报告>指出,2020年 ...