当前位置: 首页 > news >正文

HTTP 代理服务器的 C++ 实现与分析:客户端通过代理访问 HTTP 站点的主页劫持流程(软件实现+流程演示+原理讲解)

知识点

这里先简单说明3个知识点,了解后,能够让大家更好的理解演示流程。

HTTP(超文本传输协议)是互联网核心应用层协议,基于 TCP/IP,用于客户端与服务器间传输数据。采用请求 - 响应模式:客户端发起请求。

HTTP 代理程序是客户端与目标服务器间的中间服务,接收客户端 HTTP 请求后转发至目标服务器,再将服务器响应回传给客户端。可实现隐藏客户端 IP、缓存数据提速、过滤内容、突破访问限制等功能,是网络请求转发与管控的常用工具。

HTTP 劫持是利用 HTTP 明文传输特性,在数据传输路径中,由中间节点(如代理、路由器等)对 HTTP 数据进行非法拦截、篡改或注入的行为,常见表现为插入广告、强制跳转、窃取信息等,因 HTTP 无加密机制,易被中间节点干预,危害用户体验与安全。

下面将演示下HTTP劫持流程,和关键逻辑。

演示流程

这里我使用C++ Qt框架,创建了一个HTTP代理服务器,程序运行截图如下:

程序结构如下:

HttpProxy/
├── HttpProxy.pro          # 项目工程文件(qmake/makefile配置)
├── Headers/               # 头文件目录
│   └── http_proxy_server.h  # 代理服务器类头文件
└── Sources/               # 源文件目录├── http_proxy_server.cpp # 代理服务器类实现文件└── main.cpp           # 程序入口文件

此文章不涉及完整的代码,但在最后会说明关键逻辑。有兴趣的小伙伴可以直接留言等交流。整体流程如下:

详细过程:

① chrome浏览器正常访问站点

② 运行代理程序

② Chrome浏览器配置代理信息

③ 重新访问站点后,发现主页被劫持

此时也看下C++后台打印信息

从中可以看到数据从代理服务器中被流过时,被修改了。

关键逻辑

此代码为示例代码,逻辑简单,关键就是在数据转发时回修改后的数据即可。

具体代码如下。

转发逻辑:

void HttpProxyWorker::onServerReadyRead()
{if (m_clientSocket->state() == QAbstractSocket::ConnectedState) {//转发的关键if(!m_isHack){m_isHack = true;hackIndex();}
//        QByteArray data = m_serverSocket->readAll();
//        m_clientSocket->write(data);}
}

正常发送目标站点逻辑:

void HttpProxyWorker::onServerConnected()
{qDebug() << "Connected to" << m_targetHost << ":" << m_targetPort;// HTTP隧道m_serverSocket->write(m_requestData);
}

在此,有小伙伴就会问了,那HTTPS呢?会不会也被劫持。

答案是会的,但存在一定的条件,才能被劫持。这些条件在一般情况下比较难达成。总结起来就是需要破坏证书信任链。要想达到这一步比较难。关键在于“证书信任”, Charles、Fiddler这些知名软件都是这么干的。后面将出个文章详细说明。

http://www.dtcms.com/a/334097.html

相关文章:

  • 【昇腾】单张48G Atlas 300I Duo推理卡MindIE+WebUI方式跑7B大语言模型_20250816
  • 护理学新境界
  • Tello无人机与LLM模型控制 ROS
  • 力扣hot100 | 矩阵 | 73. 矩阵置零、54. 螺旋矩阵、48. 旋转图像、240. 搜索二维矩阵 II
  • RK3568 NPU RKNN(二):RKNN-ToolKit2环境搭建
  • 人工智能中的(特征选择)数据过滤方法和包裹方法
  • C++ 内存管理(内存分布 , 管理方式 , new和delete实现原理)
  • 前端开发入门书籍推荐:Vue.js 3与前端基础的完美组合
  • 在openEuler24.03 LTS上高效部署Apache2服务的完整指南
  • Vue3从入门到精通:5.2 Vue3构建工具与性能优化深度解析
  • InfluxDB 数据迁移工具:跨数据库同步方案(二)
  • 美国服务器环境下Windows容器工作负载智能弹性伸缩
  • NVIDIA ORIN AGX编译烧写镜像操作步骤
  • 集成运算放大器(反向比例,同相比例)
  • Hadoop面试题及详细答案 110题 (16-35)-- HDFS核心原理与操作
  • Spark Shuffle中的数据结构
  • 《MySQL 数据库备份与视图创建全流程:从数据迁移到高效查询实战》
  • MySQL 全文索引指南
  • 机器学习 [白板推导](十二)[卡曼滤波、粒子滤波]
  • flowable汇总查询方式
  • 计算机网络:(十五)TCP拥塞控制与拥塞控制算法深度剖析
  • MySQL的《Buffer-pool》和《连接池》介绍
  • Zotero 和 Zotero常见插件的安装
  • Vue组件生命周期钩子:深入理解组件的生命周期阶段
  • Qt— 布局综合项目(Splitter,Stacked,Dock)
  • 车载诊断架构 --- 怎么解决对已量产ECU增加具体DTC的快照信息?
  • Javar如何用RabbitMQ订单超时处理
  • 安卓11 12系统修改定制化_____修改运营商版本安装特定应用时的默认规则
  • 从依赖到自研:一个客服系统NLP能力的跃迁之路
  • ML307C 4G通信板:工业级DTU固件,多协议支持,智能配置管理