在PyCharm中直接启动mitmproxy并自动打开关闭系统代理

在这里插入图片描述

前言

在前面的文章中,有几篇是介绍mitmproxy 的。
这个mitmproxy 的确是个捕获数据的好工具,但在运行时候需要在命令行启动,这是很令人苦恼的。

之前也尝试过脱离命令行去启动mitmproxy在Python中启动mitmproxy,脱离命令行启动mitmproxy监听
但它是借助Python 中的 ossubprocess模块去执行Windows系统的cmd命令;
总觉得这不是个好方法,遂有此文。

在这篇文章中,我将介绍如何在PyCharm中直接启动mitmproxy,让你可以更加方便地使用这个强大的工具。

知识点

模块作用
mitmproxy免费和开源的交互式HTTPS代理
atexit程序在退出时的处理器
winprox通过Python模块函数和命令行编程来实现修改系统代理

如何在PyCharm中直接启动mitmproxy

  • 通过将命令行参数以逗号分隔,依次填写到mitmdump([]) 里面,可以在PyCharm中直接启动mitmproxy。

如何自动启动和关闭系统代理:

  • 通过使用winproxy库的ProxySetting类,可以方便地在Windows系统中启动和关闭系统代理。

如何使用atexit模块注册程序退出时的处理函数:

  • 通过atexit.register()函数,可以在程序退出时自动执行特定的清理操作,如关闭系统代理。

如何编写mitmproxy的数据捕获脚本:

  • 文章中提供了一个具体的脚本示例,展示了如何捕获和处理特定URL的HTTP响应。

实现

常规情况

现在项目只有一个script.py文件,它的内容为mitmproxy数据捕获的脚本。
代码来自于这篇文章,爬虫?不是,mitmproxy帮你采集微信公众号留言

script.py

from mitmproxy import http# 定义一个函数,用于处理每一个响应
def response(flow: http.HTTPFlow) -> None:# 判断响应的URL是否是公众号留言的URLif "https://mp.weixin.qq.com/mp/appmsg_comment?action=getcomment&scene=0" in flow.request.url:# 获取响应的数据包response = flow.response# 打印出响应的状态码和内容print(f"Status: {response.status_code}")print(f"Content: {response.content}")print(parse(data=response.text))def parse(data: str):"""解析留言流量包"""_data = defaultdict(list)try:for item in json.loads(data)['elected_comment']:_data['nick_name'].append(item['nick_name'])_data['content'].append(item['content'])_data['like_num'].append(item['like_num'])_data['province_name'].append(item['ip_wording']['province_name'])except (KeyError, json.decoder.JSONDecodeError):...finally:return _dataaddons = [response]

在这份代码中,一般的运行步骤是去命令行,输入

  • -p 9527 -q 这些参数可选~
mitmdump -s demo.py -p 9527 -q

这样一来一回,就不够便捷了。


在PyCharm运行

在这里,只需要将命令行参数以逗号分隔,依次填写到mitmdump([]) 里面即可。

就是这么简单!!!

from mitmproxy import http
from mitmproxy.tools.main import mitmdumpif __name__ == "__main__":# 运行 Mitmproxy,并传递命令行参数mitmdump(['-s', __file__, '-p', '9527', '-q'])

这里,需要注意一下的是,作为mitmproxy脚本,如果写的是类,则需要添加一行代码,

有class

顺序也很重要,必须要在if __name__ == '__main__':之前。

from mitmproxy.tools.main import mitmdumpclass ListenComment:def __init__(self):...def response(self, flow: mitmproxy.http.HTTPFlow):...addons = [ListenComment()]if __name__ == '__main__':mitmdump(['-s', __file__, '-q'])

实际案例

这里结合这一篇文章,【Python】Windows跟随程序启动和关闭系统代理

完成一个自动启动与关闭系统代理,且在PyCharm 执行的 mitmproxy 程序,极简到家了!!!

# -*- coding: utf-8 -*-
# Name:         mitm.py
# Author:       小菜
# Date:         2023/11/03 11:30
# Description:import atexit
import json
from collections import defaultdictimport mitmproxy.http
from mitmproxy.tools.main import mitmdump
from winproxy import ProxySettingps = ProxySetting()def set_proxy():"""设置系统代理"""ps.enable = Trueps.server = '127.0.0.1:9527'ps.registry_write()print('代理已经打开!')def close_proxy():"""关闭系统代理"""ps.enable = Falseps.registry_write()print('代理已经关闭!')class ListenComment:def __init__(self):self.map = {'liveObjectId': str(),'jsons': dict()}self.set = set()# 定义一个函数,用于处理每一个响应def response(self, flow: mitmproxy.http.HTTPFlow) -> None:# 判断响应的URL是否是公众号留言的URLif "https://mp.weixin.qq.com/mp/appmsg_comment?action=getcomment&scene=0" in flow.request.url:# 获取响应的数据包response = flow.response# 打印出响应的状态码和内容print(f"Status: {response.status_code}")print(f"Content: {response.content}")print(self.parse(data=response.text))def parse(self, data: str):"""解析留言流量包"""_data = defaultdict(list)try:for item in json.loads(data)['elected_comment']:_data['nick_name'].append(item['nick_name'])_data['content'].append(item['content'])_data['like_num'].append(item['like_num'])_data['province_name'].append(item['ip_wording']['province_name'])except (KeyError, json.decoder.JSONDecodeError):...finally:return _dataaddons = [ListenComment()]if __name__ == '__main__':# 打开代理set_proxy()# 注册清理函数atexit.register(close_proxy)mitmdump(['-s', __file__, '-p 9527', '-q'])

运行效果如下图所示:

在这里插入图片描述

总结

在本文中,我详细介绍了如何在PyCharm中直接启动mitmproxy,以及如何自动启动和关闭系统代理,无需再通过命令行。
这种方法不仅避免了频繁在命令行中输入命令的麻烦,而且通过自动管理系统代理,使得整个过程更加便捷和高效。
我还提供了具体的代码示例,以帮助读者朋友们更好地理解和实践。
希望这篇文章能对大家使用mitmproxy进行数据捕获的工作带来帮助,提高工作效率。

后话

本次分享到此结束,
see you~🎉🎉

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

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

相关文章

机器人连杆惯量参数辨识(估计)

杆的转动惯量的计算公式是Imr^2。在经典力学中,转动惯量(又称质量惯性矩,简称惯矩)通常以I 或J表示,SI 单位为 kgm。对于一个质点,I mr,其中 m 是其质量,r 是质点和转轴的垂直距离。…

Zephyr-7B-β :类GPT的高速推理LLM

Zephyr 是一系列语言模型,经过训练可以充当有用的助手。 Zephyr-7B-β 是该系列中的第二个模型,是 Mistralai/Mistral-7B-v0.1 的微调版本,使用直接偏好优化 (DPO) 在公开可用的合成数据集上进行训练 。 我们发现,删除这些数据集的…

React Native 环境搭建

Mac 版 根据官网步骤进行,V 0.72 注:在开始之前,我删除了电脑中已有 Homebrew ,重新安装最新版的 Homebrew。过程中使用有科学上网工具。 关于 Homebrew 的安装问题,可以参考这篇博客。 1,安装 node b…

亚马逊云科技:让生成式AI真正走向普惠

伴随着ChatGPT的横空出世,生成式AI(Artificial Intelligence Generated Content,也称AIGC)大潮也以锐不可当之势席卷全球。从各行各业的商业领袖,到千千万万的程序员和开发者,都在思考如何借助生成式AI技术…

[iOS开发]iOS中TabBar中间按钮凸起的实现

在日常使用app的过程中,经常能看到人家实现了底部分栏控制器的中间按钮凸起的效果,那么这是怎么实现的呢? 效果演示: 实现原理: 创建按钮 创建一个UITabBar的子类,重写它的layoutSubviews方法&#xff1…

文本内容转换成语音播放的工具:Speech Mac

Speech Mac版是一款适用于Mac电脑的语音合成工具。它将macOS语音合成器的所有功能整合到一个易于使用的界面中。通过Speech Mac版,用户可以选择40多种声音和语言,方便地将文本转换为语音。用户可以将文本拖放或粘贴到Speech中,并随时更改语音…

Nginx搭载负载均衡及前端项目部署

目录 ​编辑 一.Nginx安装 1.安装所需依赖 2.下载并解压Nginx安装包 3.安装nginx 4.启动Nginx服务 二.Tomcat负载均衡 1.准备环境 1.1 准备两个Tomcat 1.2 修改端口号 1.3 配置Nginx服务器集群 2.效果展示 ​编辑三.前端项目打包 ​编辑四.前端项目部署 1.上传项目…

Websocket @ServerEndpoint不能注入@Autowired

在websocket中使用ServerEndpoint无法注入Autowired、Value 问题分析 Spring管理采用单例模式(singleton),而 WebSocket 是多对象的,即每个客户端对应后台的一个 WebSocket 对象,也可以理解成 new 了一个 WebSocket&…

SQL左连接实战案例

要求:用表df1和表df2的数据,得到df3 一、创建表 CREATE TABLE df1 (姓名 varchar(255) DEFAULT NULL,年龄 int DEFAULT NULL,部门 varchar(255) DEFAULT NULL,id int DEFAULT NULL );CREATE TABLE df2 (部门 varchar(255) DEFAULT NULL,年龄 int DEFAU…

Qt中正确的设置窗体的背景图片的几种方式

Qt中正确的设置窗体的背景图片的几种方式 QLabel加载图片方式之一Chapter1 Qt中正确的设置窗体的背景图片的几种方式一、利用styleSheet设置窗体的背景图片 Chapter2 Qt的主窗口背景设置方法一:最简单的方式是通过ui界面来设置,例如设置背景图片方法二 &…

【六、http】go的http的客户端重定向

一、http的重定向 重定向过程:客户浏览器发送http请求----》web服务器接受后发送302状态码响应及对应新的location给客户浏览器–》客户浏览器发现是302响应,则自动再发送一个新的http请求,请求url是新的location地址----》服务器根据此请求寻…

GitLab CI/CD 持续集成/部署 SpringBoot 项目

一、GitLab CI/CD 介绍 GitLab CI/CD(Continuous Integration/Continuous Deployment)是 GitLab 提供的一种持续集成和持续部署的解决方案。它可以自动化软件的构建、测试和部署过程,以便开发者更快地、更频繁地发布可靠的产品。 整体过程如…