使用自制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.url
        video_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 = 12345
    with 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 QNetworkProxy

app = 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 socket

def 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_url
        print(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 = 12345
    with 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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

调用第三方API超时如何区分是连接超时还是响应超时

在Java中调用第三方接口时&#xff0c;遇到超时问题通常涉及两种类型的超时&#xff1a;连接超时(Connect Timeout)和响应超时(Read TimeOut) 要查看是对方响应超时还是自己方连接超时&#xff0c;可以通过设置Java的HttpClient的超时时间和捕获异常来判断。以下是一个示例&…

灌区流量监测设备:农田灌溉的“智慧眼”

随着现代农业的不断发展&#xff0c;对灌溉技术的要求也越来越高。传统的灌溉方式不仅效率低下&#xff0c;而且容易造成水资源的浪费。如今&#xff0c;灌区流量监测设备以其独特的优势&#xff0c;成为农田灌溉的新宠&#xff0c;被誉为农田的“智慧眼”。 精准把控&#xff…

Java 实验五:继承与接口

一、实验目的 1、通过实验内容&#xff0c;锻炼自身进行需求分析&#xff0c;系统设计以及编程开发的能力&#xff0c;了解软件开发的流程。 二、实验环境 Jdk 1.8&#xff1b; Eclipse 三、实验内容 试分析停车场系统的常用业务功能&#xff0c;梳理出基本需求&#xff0…

优阅达线上分享:快速上手 Tableau 计算功能

无论是想获取更深入的业务洞察&#xff0c;还是希望实现更复杂的数据图表&#xff0c;Tableau 计算都能助你实现需求。然而&#xff0c;对于没有数学或统计经验的用户来说&#xff0c;快速理解并掌握 Tableau 计算功能的逻辑和用法并非易事。 如果你刚接触 Tableau 计算不知从…

把ros消息转换成中文输出

把ros消息转换成中文输出 c实现 发布 //发布性能评估数据 /trilateration_time_log void publishTrilaterationLog(const int reflectorPanelPoints_size,const double duration_count,const std::string& resultType,const std::string& resultChineseMessage,cons…

python基础知识点(蓝桥杯python科目个人复习计划69)

做些基础题 第一题&#xff1a;微生物增值 题目描述&#xff1a; 假设有两种微生物x和y。 x出生后每隔3分钟分裂一次&#xff08;数目加倍&#xff09;&#xff0c;y出生后每隔2分钟分裂一次&#xff08;数目加倍&#xff09;。 一个新出生的x&#xff0c;半分钟之后吃掉一…

Git常用命令以及使用IDEA集成Gitee

目录 一、设置用户签名 二、初始化本地库 三、查看本地库状态 四、添加文件到暂存区 五、提交本地库 六、修改文件 七、版本穿梭 八、Git分支 九、分支的操作 9.1、查看分支 9.2、创建分支 9.3、切换分支 9.4、合并分支 十、团队协作 十一、Idea集成Git 11.1、配…

初识C++|类与对象(上)

&#x1f36c; mooridy-CSDN博客 &#x1f9c1;C专栏&#xff08;更新中&#xff01;&#xff09; 1. 类的定义 1.1 类定义格式 • class为定义类的关键字&#xff0c;Stack为类的名字&#xff0c;{}中为类的主体&#xff0c;注意类定义结束时后⾯分号不能省略。 类体中内容…

【Web服务与Web应用开发】【C#】VS2019 创建ASP.NET Web应用程序,以使用WCF服务

目录 0.简介 1.环境 2.知识点 3.详细过程 1&#xff09;创建空项目 2&#xff09;添加Web表单 3&#xff09;使用Web表单的GUI设计 4&#xff09;添加服务引用 5&#xff09;在Web的button函数中调用服务&#xff0c;获取PI值 6&#xff09;测试 0.简介 本文属于一个…

如何直接套用模板,快速搭建一个3D展示页面?

随着Web3D技术的飞速进步&#xff0c;网页设计实现了从平面二维到立体三维的华丽蜕变&#xff0c;这一变革为品牌营销领域注入了前所未有的互动活力。多样化的3D营销手段&#xff0c;不仅极大地吸引了消费者的目光&#xff0c;还显著提升了品牌形象与销售量&#xff0c;助力企业…

各类专业技术的pdf电子书

从业多年&#xff0c;收集了海量的pdf电子书籍&#xff0c;感兴趣的私聊。

探索智慧校园德育系统的学生考核之道

在当代教育领域&#xff0c;智慧校园德育管理系统的学生考核功能正逐渐成为推动学生全面发展的重要引擎。它不仅革新了传统德育评价的方式&#xff0c;还深度融入了学生日常的学习生活&#xff0c;成为连接学生、教师与学校管理层之间沟通与理解的桥梁。德育考核功能的核心在于…

Excel办公技巧:制作二级联动下拉菜单

分享制作二级联动下拉菜单的方法&#xff0c;即使数据有增删&#xff0c;菜单也能自动更新&#xff01; 可以通过先定义名称&#xff0c;再结合数据验证&#xff0c;来做二级联动下拉菜单。 1. 准备数据 首先&#xff0c;我们需要准备好要进行二级联动下拉菜单的数据&#xff…

【大模型入门】LLM-AI大模型介绍

大语言模型 (LLM) 背景 &#x1f379;大语言模型 (Large Language Model) 是一种人工智能模型, 它们通常包含数千亿甚至更多的参数&#xff0c;并在大规模数据集上进行训练。大语言模型可以处理多种自然语言任务&#xff0c;如文本分类、问答、翻译、对话等等。 自然语言模型…

识别 TON 生态系统中前10种加密资产,以bitget 钱包为例

元描述&#xff1a;想要找到下一个 100 倍加密货币投资&#xff1f;请密切关注这篇文章&#xff1b;它揭示了所有可能很快变得非常有价值的 TON 网络宝石。 由 Telegram 提供支持的 TON&#xff08;开放网络&#xff09;生态系统正在蓬勃发展&#xff01;这是一个充满激动人心的…

【雅思备考IELTS】美文阅读 艾米莉·勃朗特《呼啸山庄》Wuthering Heights by Emily Bronte

Reading Materials for IELTS (from books that I love) Episode 2 2024/7/15 By James Lee 说明&#xff1a; 奇崛、跌宕、爱恨分明&#xff0c;英国女作家艾米莉 勃朗特&#xff08;Emily Bronte&#xff0c;1818-1848&#xff09;短暂一生当中出版的唯一一本小说&#xff…

typescript新规范及vue3常用的属性解析【2024】

文章目录 如在vue中 使用tyescript来规范定义类型解释一下 < >的意思 定义 了 personList &#xff1a;是个数组 Array 且要告诉里面每一项 结构长什么样 Array<PersonInter>definepropsvue3中的hooks组件父子组件 方法、数据、相互调用 如在vue中 使用tyescript来…

C语言课程回顾:十、C语言之 指针

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 C语言之 指针 10 指针10.1 地址指针的基本概念10.2 变量的指针和指向变量的指针变量10.2.1 定义一个指针变量10.2.2 指针变量的引用10.2.3 指针变量作为函数参数10.2.4 指针变…

嵌入式热门领域有哪些?

嵌入式热门领域有哪些? 当前&#xff0c;嵌入式行业正处于快速发展阶段&#xff0c;并在多个领域呈现出蓬勃的热度。 物联网 物联网作为目前嵌入式行业的炙手可热领域之一&#xff0c;已经在各行业展现出了强劲的增长势头。嵌入式系统通过物联网连接各种物理设备和传感器&…

如何用Claude 3 Sonnet Artifacts实现对数据文件的可视化分析?

如何用Claude 3 Sonnet Artifacts实现对数据文件的可视化分析&#xff1f; Prompt模板&#xff1a; Initial Request: 初始请求&#xff1a; I have uploaded data of the number of Software Engineering Jobs in the US since May 2020. I need different visual creative…