使用自制Qt工具配合mitmproxy进行网络调试

在软件开发和网络调试过程中,抓包工具是不可或缺的。传统的抓包工具如Fiddler或Charles Proxy通常需要设置系统代理,这会抓到其他应用程序的网络连接,需要设置繁琐的过滤,导致不必要的干扰。为了解决这个问题,我们可以利用Qt的QWebView内嵌浏览器配合mitmproxy进行网络调试,从而实现更加灵活和高效的抓包体验。

from mitmproxy import http
import socket
def request(flow: http.HTTPFlow) -> None:# 检查请求的URL是否包含特定的关键字if "video" in flow.request.pretty_url:print(f"success&&&&&&&&&&&&&&&&& Detected video request: {flow.request.pretty_url}")def response(flow: http.HTTPFlow) -> None:# 检查响应的内容类型是否为视频if "video" in flow.response.headers.get("Content-Type", ""):print(f"success&&&&&&&&&&&&&&&&& Detected video response: {flow.response.headers.get('Content-Type')}")print(f"success&&&&&&&&&&&&&&&&& Video URL: {flow.request.pretty_url}")#video_url = flow.request.urlvideo_url = flow.request.pretty_url#ctx.log.info(f"success&&&&&&&&&&&&&&&&&---------Found video URL: {video_url}")print(f"success&&&&&&&&&&&&&&&&&---------Found video URL: {video_url}")# 将视频地址发送到Qt应用程序send_to_qt(video_url)# 将视频地址保存到文件with open("video_urls.txt", "a") as file:file.write(video_url + "\n")file.flush() def send_to_qt(video_url):# 使用socket将视频地址发送到Qt应用程序host = '127.0.0.1'port = 12345with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:s.connect((host, port))s.sendall(video_url.encode())

什么是mitmproxy?

mitmproxy 是一个开源的交互式中间人代理工具,它允许用户拦截、查看和修改网络流量。它主要用于开发、测试和调试网络应用,以及进行安全研究。mitmproxy 提供了丰富的Python API,用户可以编写自定义脚本来处理网络流量。

为什么选择Qt的QWebView?

Qt是一个跨平台的C++应用程序开发框架,广泛用于桌面和移动应用开发。QWebView是Qt提供的一个组件,可以方便地嵌入到应用程序中,实现内嵌浏览器功能。使用QWebView的好处在于:

  1. 灵活性:QWebView可以轻松嵌入到任何Qt应用程序中,无需额外配置系统代理。
  2. 隔离性:内嵌浏览器不会影响其他应用程序的网络连接,避免了不必要的干扰。
  3. 可定制性:Qt提供了丰富的API,可以对QWebView进行深度定制,满足各种需求。

准备工作

1.安装python3.8及以上版本。

2.安装mitmproxy ,使用pip安装mitmproxy:

pip install mitmproxy
#如果速度慢,可用镜像源方式
pip install --index-url https://mirrors.aliyun.com/pypi/simple/ mitmproxy

3.pip镜像源的更改。

默认pip安装软件包比较慢,修改其为国内镜像源。方式有几种。上述的方式仅pip install 命令有效,且需要输入那么长一串。还用个办法是写入配置文件。

你可以编辑pip的配置文件。在Windows系统中,pip的配置文件位于用户的主目录下,路径通常是C:\Users\<username>\pip\pip.ini。如果文件不存在,你可以手动创建。

在Linux或macOS系统中,配置文件通常位于~/.config/pip/pip.conf。同样,如果文件不存在,你可以手动创建。

配置文件的内容可以如下所示: 

[global]
index-url = http://mirrors.tencentyun.com/pypi/simple
trusted-host = mirrors.tencentyun.com

这样设置后,每次使用pip安装包时都会默认使用配置的镜像源。 

工具实现原理

1.配置QWebView:在Qt应用程序中,配置QWebView使用mitmproxy作为代理。可以通过设置网络请求的代理来实现:

from PyQt5.QtWidgets import QApplication
from PyQt5.QtWebEngineWidgets import QWebEngineView
from PyQt5.QtCore import QUrl
from PyQt5.QtNetwork import QNetworkProxyapp = QApplication([])
view = QWebEngineView()# 设置代理
proxy = QNetworkProxy()
proxy.setType(QNetworkProxy.HttpProxy)
proxy.setHostName("127.0.0.1")
proxy.setPort(8080)  # mitmproxy默认端口
QNetworkProxy.setApplicationProxy(proxy)view.load(QUrl("http://example.com"))
view.show()
app.exec_()

2.编写mitmproxy脚本:编写一个mitmproxy脚本,用于拦截和处理网络流量。例如,以下脚本可以拦截包含“video”关键字的请求和响应,并将视频URL发送到Qt应用程序:

from mitmproxy import http
import socketdef request(flow: http.HTTPFlow) -> None:if "video" in flow.request.pretty_url:print(f"Detected video request: {flow.request.pretty_url}")def response(flow: http.HTTPFlow) -> None:if "video" in flow.response.headers.get("Content-Type", ""):video_url = flow.request.pretty_urlprint(f"Detected video response: {flow.response.headers.get('Content-Type')}")print(f"Found video URL: {video_url}")send_to_qt(video_url)def send_to_qt(video_url):host = '127.0.0.1'port = 12345with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:s.connect((host, port))s.sendall(video_url.encode())

3.运行Qt应用程序

启动Qt应用程序,确保QWebView已经配置好代理,并加载目标网页。程序内部自动调用并打开mitmproxy。此时,mitmproxy会拦截并处理网络流量,根据脚本逻辑进行相应的操作。

优点总结

  1. 灵活性:使用QWebView内嵌浏览器,无需修改系统代理,避免了其他应用的干扰。
  2. 隔离性:内嵌浏览器不会影响其他应用程序的网络连接,确保调试环境的纯净。
  3. 可定制性:Qt提供了丰富的API,可以对QWebView进行深度定制,满足各种需求。
  4. 高效性:mitmproxy提供了强大的脚本支持,可以自动化处理网络流量,提高调试效率。

通过结合Qt的QWebView和mitmproxy,成功地创建了一个基于Qt的网络调试工具,它能够精确地抓取和分析Qt应用的网络请求,而不会受到其他应用的干扰。这种方法不仅提高了调试效率,还降低了系统代理设置带来的潜在风险,为软件开发人员提供了一种更为灵活和可控的网络调试手段。

http接口调试

使用该工具调试http接口也是相当的简单。不但可以调试,还可以抓包监控接口通信的每一个细节。是不是该工具有强大的接口调试页面?没必要,采用开源免费的http在线调试工具hoppscotch就行了。

hoppscotch介绍

Hoppscotch 是一个开源的、轻量级的 API 开发工具,它允许开发者通过直观的用户界面来创建和测试 HTTP 请求。Hoppscotch 的前身是 Postwoman,后来改名为 Hoppscotch。它可以直接在浏览器中使用,无需安装任何软件,因此非常方便。

Hoppscotch 的主要特点包括:

  • 开源: 代码托管在 GitHub 上,任何人都可以查看、使用和贡献代码。
  • 免费: 使用 Hoppscotch 是完全免费的,没有任何隐藏费用。
  • 轻量级: 界面简洁,加载速度快,不会占用太多系统资源。
  • 跨平台: 可以在任何支持现代浏览器的设备上使用。
  • 支持多种请求方法: 包括 GET、POST、PUT、DELETE 等。
  • 支持多种认证方式: 如 Basic Auth、Bearer Token、OAuth 等。
  • 环境变量: 可以设置和管理不同的环境变量,方便在不同环境中切换。
  • 历史记录: 保存请求历史,方便重复使用。

总之,Hoppscotch 是一个功能强大且免费的 API 调试工具,适合开发者进行快速、高效的 API 测试。只需要在地址栏中输入 :

https://hoppscotch.io/

http接口调试界面就有了。 

Hoppscotch • Open source API development ecosystem

HTTPie介绍

类似好用的在线api调试工具还有HTTPie,但它也提供了一个网页界面(HTTPie for Web),可以让你在浏览器中发送 HTTP 请求。它支持多种请求方法,并且有一个简洁的用户界面。我喜欢这个,因为界面更好看😄。

网址: https://httpie.io/

HTTPie 还有强大的命令行的使用方式,在各个平台都能下载使用,比如python环境下

pip install httpie

它比curl的命令行好用和简单多了。用法:

http [方法] URL [请求项…]

http GET http://localhost:8083/getdemo username==admin password==123456

post:

http --form POST localhost:8083/postdemo2 username='admin' password='123456'
#post json
http POST localhost:8083/header Content-Type:application/json username=admin password=123456

其他资源

Index of /qt/archive/online_installers/4.6/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/378041.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux中关于环境变量的常用的设置方法

一. linux中设置环境变量的方式 1.使用/etc/environment, 是一个全局的环境变量设置文件&#xff0c;它会影响到所有用户和所有进程。当你需要设置一个全局的环境变量时&#xff0c;应该使用这个文件。这个文件的格式是 KEYvalue&#xff0c;每行一个环境变量。 2. 使用/etc/…

【unity笔记】常见问题收集

一 . Unity Build GI data 卡住问题 解决: 参考官方文档&#xff0c;GI(Global Illumination) data 指的是全局照明信息。 在Unity的Edit->Preference中&#xff0c;可以编辑GI缓存路径和分配GI缓存大小。 调出Window->Rendering->Lighting窗口&#xff0c;取消勾选…

【Caffeine】⭐️SpringBoot 项目整合 Caffeine 实现本地缓存

目录 &#x1f378;前言 &#x1f37b;一、Caffeine &#x1f37a;二、项目实践 2.1 环境准备 2.2 项目搭建 2.3 接口测试 ​&#x1f49e;️三、章末 &#x1f378;前言 小伙伴们大家好&#xff0c;缓存是提升系统性能的一个不可或缺的工具&#xff0c;通过缓存可以避免大…

基于SpringBoot+VueJS+微信小程序技术的图书森林共享小程序设计与实现:7000字论文+源代码参考

博主介绍&#xff1a;硕士研究生&#xff0c;专注于信息化技术领域开发与管理&#xff0c;会使用java、标准c/c等开发语言&#xff0c;以及毕业项目实战✌ 从事基于java BS架构、CS架构、c/c 编程工作近16年&#xff0c;拥有近12年的管理工作经验&#xff0c;拥有较丰富的技术架…

Java面试八股之Redis哨兵机制

Redis哨兵机制 Redis Sentinel&#xff08;哨兵&#xff09;模式是一种高可用解决方案&#xff0c;用于监控和自动故障转移Redis主从集群。以下是对哨兵模式详细过程的描述&#xff1a; 1. 初始化与配置 部署哨兵节点&#xff1a;在不同的服务器上部署一个或多个Redis Sentin…

leetcode 周赛(406)全AC留念

纪念第一次 leetcode 周赛&#xff08;406&#xff09;全AC 1.(100352. 交换后字典序最小的字符串) 题目描述&#xff1a; 给你一个仅由数字组成的字符串 s&#xff0c;在最多交换一次 相邻 且具有相同 奇偶性 的数字后&#xff0c;返回可以得到的 字典序最小的字符串 。 如…

ubantu22.04安装OceanBase 数据库

1、管理员启动cmd,运行 sudo bash -c "$(curl -s https://obbusiness-private.oss-cn-shanghai.aliyuncs.com/download-center/opensource/service/installer.sh)" 2、提示如下代表安装完成 3、修改数据库配置文件的密码 sudo vim /etc/oceanbase.cnf 然后保存退…

初学SpringMVC之 JSON 篇

JSON&#xff08;JavaScript Object Notation&#xff0c;JS 对象标记&#xff09;是一种轻量级的数据交换格式 采用完全独立于编程语言的文本格式来存储和表示数据 JSON 键值对是用来保存 JavaScript 对象的一种方式 比如&#xff1a;{"name": "张三"}…

Redis实战—附近商铺、用户签到、UV统计

本博客为个人学习笔记&#xff0c;学习网站与详细见&#xff1a;黑马程序员Redis入门到实战 P88 - P95 目录 附近商铺 数据导入 功能实现 用户签到 签到功能 连续签到统计 UV统计 附近商铺 利用Redis中的GEO数据结构实现附近商铺功能&#xff0c;常见命令如下图所示。…

牛客TOP101:合并两个排序的链表

文章目录 1. 题目描述2. 解题思路3. 代码实现 1. 题目描述 2. 解题思路 与正常的合并两个有序数组思路一样&#xff0c;这里可以定义一个头节点&#xff08;虚拟节点&#xff09;&#xff0c;可以方便我们一开始进行连接。用两个指针标记两个链表的结点&#xff0c;进行循环比较…

5.4 软件工程-系统设计

系统设计 - 概述 设计软件系统总体结构 数据结构及数据库设计 编写概要设计文档、评审 详细设计的基本任务 真题

FPGA 项目菜单功能比较

为了帮助您更好地理解每个FPGA功能模块的实用场合、区别和特点&#xff0c;以下是详细的比较&#xff1a; 功能模块实用场合区别特点FPGA I/O自动控制系统、数据采集系统直接与FPGA板卡上的物理端口交互&#xff0c;配置和使用外部I/O设备灵活配置输入输出端口&#xff0c;支持…

[Spring] Spring Web MVC案例实战

&#x1f338;个人主页:https://blog.csdn.net/2301_80050796?spm1000.2115.3001.5343 &#x1f3f5;️热门专栏: &#x1f9ca; Java基本语法(97平均质量分)https://blog.csdn.net/2301_80050796/category_12615970.html?spm1001.2014.3001.5482 &#x1f355; Collection与…

「Pytorch」roLabelImg 图像异常旋转 bug

在进行Yolo-obb 模型训练的时候需要标注旋转框&#xff0c;roLabelImg 是比较推荐的一款旋转框标注工具&#xff0c;既可以标注正常的矩形框&#xff0c;还可以标注旋转框 roLabelImg Github 地址&#xff1a;https://github.com/HumanSignal/labelImg 但是在使用过程中遇到了…

数据库管理-第218期 服务器内存(20240711)

数据库管理218期 2024-07-11 数据库管理-第218期 服务器内存&#xff08;20240711&#xff09;1 内存2 ECC内存3 原理3.1 多副本传输3.2 纠错码3.3 汉明码 总结 数据库管理-第218期 服务器内存&#xff08;20240711&#xff09; 作者&#xff1a;胖头鱼的鱼缸&#xff08;尹海文…

利用OSMnx进行城市路网数据的速度与通行时间推算及分析

本文还是以广州市路网为例&#xff0c;通过osmmx调用ox.add_edge_speeds(G)时&#xff0c;该函数会遍历图G 中的每条边&#xff08;即每条街道&#xff09;&#xff0c;并基于一些预设的规则或街道属性&#xff08;如街道类型、是否为主要道路、是否有速度限制等&#xff09;来…

Logistic回归算法原理详解及应用

目录 引言 基本原理 损失函数 参数估计 优缺点 应用 Logistic回归优化算法 具体案例 引言 逻辑回归&#xff08;Logistic Regression&#xff09;是一种广泛用于分类问题的统计方法&#xff0c;尤其是二分类问题。尽管名字中有“回归”二字&#xff0c;但它实际上是一…

Vue3总结汇总(不间断更新)

一、常用依赖插件汇总 1.1 依赖 UI组件库:1、AntDesignVue2、ElementPlus 网络请求&#xff1a;axios 组件通信&#xff1a;mitt ID生成&#xff1a;nanoid 路由&#xff1a;vue-router 三维&#xff1a;cesium 构建工具:Vite vite-plugin-vue-setup-extend&#xff1a;简化set…

编译打包自己的云手机(redroid)镜像

前言 香橙派上跑云手机可以看之前的文章&#xff1a; 香橙派5plus上跑云手机方案一 redroid(带硬件加速)香橙派5plus上跑云手机方案二 waydroid 还有一个cuttlefish方案没说&#xff0c;后面再研究&#xff0c;cuttlefish的优势在于可以自定义内核且selinux是开启的&#xf…

推荐5个实用的可视化工具

面对海量的数据&#xff0c;我们应该如何高效地提取其价值&#xff0c;让复杂的信息一目了然&#xff1f;这正是可视化工具大显身手的舞台。今天&#xff0c;我就来分享几款非常好用的数据可视化工具&#xff0c;它们不仅能够帮助你轻松驾驭数据&#xff0c;还能让你的工作汇报…