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

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

什么是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.mzph.cn/diannao/46767.shtml

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

相关文章

树结构添加分组,向上向下添加同级,添加子级

树结构添加分组&#xff0c;向上向下添加同级&#xff0c;添加子级 效果代码实现页面js 效果 代码实现 页面 <el-tree :data"treeData" :props"defaultProps" :expand-on-click-node"false":filter-node-method"filterNode" :ref&…

IP-Guard日志数据上传至 SYSLOG 服务器操作指南

一、功能简介 服务器支持把日志数据上传到 SYSLOG 服务器。 二、功能配置 2.1 数据目录移交设置 在服务器安装目录下 OServer3.ini 文件中&#xff0c;添加工具启动配置&#xff0c;配置五分钟内生效。 Path&#xff1a;设置移交目录路径&#xff0c;IPG 服务器会把收集完成的…

六西格玛培训:控制图——洞察过程真相的利器

在追求卓越绩效与持续质量改进的征途中&#xff0c;六西格玛无疑是企业不可或缺的导航灯。作为一套严谨而系统的管理方法&#xff0c;六西格玛不仅帮助企业识别并减少过程中的变异与缺陷&#xff0c;还促进了流程的优化与创新。而在这套强大的方法论中&#xff0c;控制图作为核…

Java 日期时间

Java 提供了丰富的日期时间处理功能&#xff0c;主要集中在 java.time 包下。java.time 包是从 Java 8 开始引入的&#xff0c;设计用于解决旧的 java.util.Date 和 java.util.Calendar 类存在的问题&#xff0c;提供了更加清晰、易用和线程安全的 API。 ### 主要类和接口 1.…

【postgresql】角色(Role)

PostgreSQL 中&#xff0c;角色&#xff08;Role&#xff09;是一个重要的概念&#xff0c;用于管理数据库的访问权限和用户身份。角色可以被视为用户或组&#xff0c;具体取决于它们的配置方。 角色属性 角色可以具有多种属性&#xff1a; LOGIN&#xff1a;允许角色登录数据…

Flask包算法服务

常规包算法服务,就是比较简单,直接起一个fastapi就可以了。 import time import asyncio from aidraw import engineer_log as eng from fastapi import FastAPI from pydantic import BaseModel from typing import Optional from aidraw.ardraw import run_aidraw_api# 起…

Floyd算法——AcWing 343. 排序

目录 Floyd算法 定义 运用情况 注意事项 解题思路 基本步骤 AcWing 343. 排序 题目描述 运行代码 代码思路 改进思路 Floyd算法 定义 Floyd算法&#xff0c;全称Floyd-Warshall算法&#xff0c;是一种用于解决图中所有顶点对之间的最短路径问题的动态规划算法。…

一文读懂Java并发编程基础知识

什么是并发&#xff1f; 并发是指在某个时间段内&#xff0c;多任务交替处理的能力。比如说&#xff0c;你有一台单核心CPU电脑&#xff0c;注意必须是以单核心来理解下面的例子才是正确的。你可以利用电脑边听音乐&#xff0c;边写PPT&#xff0c;还能随时斗上一盘地主。这些…

基于java+springboot+vue实现的实验室管理系统(文末源码+Lw)127

基于SpringBootVue的实现的实验室管理系统&#xff08;源码数据库万字Lun文流程图ER图结构图演示视频软件包&#xff09; 系统功能&#xff1a; 实验室管理系统 管理员功能有个人中心&#xff0c;学生管理&#xff0c;教师管理&#xff0c;公告信息管理&#xff0c;知识库管理…

杭州高校大学智能制造实验室数字孪生可视化系统平台建设项目验收

杭州高校大学智能制造数字孪生技术作为智能制造的重要支撑&#xff0c;通过构建虚拟世界的镜像&#xff0c;实现对物理世界的实时监控、预测和优化。杭州高校大学智能制造实验室数字孪生可视化系统平台建设项目&#xff0c;旨在通过引入先进的数字孪生技术&#xff0c;构建一个…

Log4j2原理及应用详解(四)

本系列文章简介&#xff1a; 在软件开发过程中&#xff0c;日志记录是一个不可或缺的重要环节。它不仅帮助开发者在开发阶段追踪和调试代码&#xff0c;还在软件运行阶段提供了宝贵的运行信息和错误追踪能力。随着软件系统的日益复杂&#xff0c;对日志记录的需求也变得越来越高…

鼠标的形状

鼠标的形状多样&#xff0c;主要取决于其设计、用途以及制造商的创意。一般来说&#xff0c;鼠标的基本形状包括以下几个部分&#xff1a; 主体部分&#xff1a; 大多数鼠标的主体部分呈流线型或稍微扁平的形状&#xff0c;以适应手掌握持。主体部分通常包含按键和滚轮&#x…

ESP32-S3多模态交互方案在线AI语音设备应用,启明云端乐鑫代理商

随着物联网&#xff08;IoT&#xff09;和人工智能&#xff08;AI&#xff09;技术的飞速发展&#xff0c;嵌入式设备正逐渐变得智能化&#xff0c;让我们的家庭生活变得更加智能化和个性化。 随着大型语言模型的不断进步和优化&#xff0c;AI语音机器人设备能够实现更加智能、…

自定义 Java ClassLoader:深入探索

在 Java 应用程序中&#xff0c;类加载器&#xff08;ClassLoader&#xff09;是实现动态加载类和资源的关键组件。默认情况下&#xff0c;Java 提供了一个类加载器层次结构&#xff0c;但有时我们需要自定义类加载器来满足特定的需求&#xff0c;比如加载加密的类文件、从数据…

mysql链接错误,unblock with ‘mysqladmin flush-hosts‘“

message from server: “Host ‘172.16.39.238’ is blocked because of many connection errors; unblock with ‘mysqladmin flush-hosts’”. 解决步骤&#xff1a; show global variables like ‘%max_connect_errors%’; set global max_connect_errors1000; flush host…

Springboot + JWT 的 Token 登录验证

目录 项目结构 一、 引入依赖 二、自定义Auth认证注解 三、 编写登录拦截器 四、定义跨域拦截器 五、 定义全局异常处理器 六、定义工具类 1. 统一错误状态码 2.统一响应类 3.Token工具类 七、 编写实体类 八、 定义控制器 1.定义登录控制器类 2 定义报错处理器 …

【单片机毕业设计选题24067】-基于STM32的智能衣控制系统

系统功能: 系统上电后OLED显示“欢迎使用智能衣服系统请稍后”两秒钟后进入正常页面显示&#xff0c; 第一行显示系统状态信息 第二行显示获取到体温值 第三行显示设定的高体温阈值和低体温阈值 第四行显示获取到心率和血氧值 短按B3按键调高心率设定高阈值 短按B4按键调…

每日一道算法题 994. 腐烂的橘子

题目 994. 腐烂的橘子 - 力扣&#xff08;LeetCode&#xff09; Python class Solution:def orangesRotting(self, grid: List[List[int]]) -> int:# 分类&#xff0c;挑好坏橘子m,nlen(grid),len(grid[0])have_goodFalserot_orange[]for r in range(m):for c in range(n…

浏览器渲染流程

渲染流水线 生成dom树 根据html生成dom树 生成cssom树 解析css生成一颗cssom树 document.styleSheets构建布局树-layout 根据dom树与cssom树构建一棵layout布局树,会移除不可见部分, 如display:none的dom, 但visible: hidden这种会保留 同时会计算可见部分的几何位置 划…

【学术会议征稿】2024年第三届信息学,网络与计算技术国际学术会议(ICINC2024)

2024年第三届信息学&#xff0c;网络与计算技术国际学术会议(ICINC2024) 2024 3rd International Conference on Informatics,Networking and Computing (ICINC 2024) 2024年第三届信息学&#xff0c;网络与计算技术国际学术会议(ICINC2024)将于2024年10月25-27日于中国郑州召…