在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是否是公众号留言的URL
    if "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 _data


addons = [response]

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

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

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


在PyCharm运行

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

就是这么简单!!!

from mitmproxy import http
from mitmproxy.tools.main import mitmdump


if __name__ == "__main__":
    # 运行 Mitmproxy,并传递命令行参数
    mitmdump(['-s', __file__, '-p', '9527', '-q'])

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

有class

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

from mitmproxy.tools.main import mitmdump

class 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 defaultdict

import mitmproxy.http
from mitmproxy.tools.main import mitmdump
from winproxy import ProxySetting

ps = ProxySetting()


def set_proxy():
    """设置系统代理"""
    ps.enable = True
    ps.server = '127.0.0.1:9527'
    ps.registry_write()
    print('代理已经打开!')


def close_proxy():
    """关闭系统代理"""
    ps.enable = False
    ps.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是否是公众号留言的URL
        if "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 _data


addons = [ListenComment()]

if __name__ == '__main__':
    # 打开代理
    set_proxy()
    # 注册清理函数
    atexit.register(close_proxy)
    mitmdump(['-s', __file__, '-p 9527', '-q'])

运行效果如下图所示:

在这里插入图片描述

总结

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

后话

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

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

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

相关文章

电脑技巧:台式机噪音非常大的几个原因以及解决办法

目录 一、CPU风扇灰尘太厚、风扇轴承老化 二、电源风扇有灰尘或者老化 三、显卡风扇有灰尘或者老化 四、硬盘老化导致的电脑主机声音大 五、台式机CPU风扇声音过大 今天小编给大家分享台式机噪音非常大的几个原因以及解决办法,值得收藏! 一、CPU风…

Telnet/ssh/Serial远程工具WindTerm

Telnet/ssh/Serial远程工具WindTerm 一、WindTerm 概述二、WindTerm 下载 一、WindTerm 概述 在远程终端工具中,secureCrt 和 XShell 是两款比较有名的远程工具,但收费。上一篇文章就介绍了一款免费软件MobaXterm,但菜单都是英文的&#xff0…

Adobe Photoshop Elements 2024 v24.0 简体中文版 | 中文直装版

下载: http://dt1.8tupian.net/2/29913a53b500.pg3介绍:Photoshop Elements 2024(简称PSE即PS简化版)是一款定位在数码摄影领域的全新的图像处理软件,该软件包括了专业版的大多数特性,只有少量的简化选项,提供了调整颜…

MedianFlow 跟踪算法详解

在技术日新月异的时代,今天的技术可能在明天就会被新的技术取代,例如现在爆火的大模型。但目前看来,大模型还不能做到无所不能。 所以这篇博客还是来考古一下,写一下传统的跟踪算法。这里不是为了怼大模型而为了写一篇传统算法而…

路由器基础(八):策略路由配置

在实际网络应用中,策略路由也是一种重要的技术手段。尽管 在考试并不注重策略路由,但是实际上应用较多,建议考生除了掌握基本的静态路由协议IP route-static, 动态路由协议RIP 、OSPF的基础配置外,还要掌握如何配置策略路由。…

pytorch学习第五篇:NN与CNN代码实例

这篇文章详细介绍了全链接神经网络实现方法,以及卷积的实现方法。最后我们发现,卷积的实现方法与全链接大同小异,因为 torch 为我们做了很多工作,我们来看看这两个有什么区别。 我们使用 torch 框架来实现两种神经网络,来对图形进行分类。 NN 首先我们引入依赖包 impor…

linux下多机器ssh免密码登录配置

20,21,22,23等4台机器配置ssh免密登陆 确认sshd配置 查看/etc/ssh/sshd_config文件,确认如下配置没有被注释掉: AuthorizedKeysFile .ssh/authorized_keys每一台机器修改hosts配置主机名(可选) 执行ssh命令,如…

Marp: 将 Markdown 变为 PPT 式样的 VScode 插件

样例代码&#xff1a; --- marp: true size: 16:9 theme: default header: footer: --- <!-- _footer: Jia ming<br>Gansu University of Political Science and Law --> <!-- _backgroundColor: lightskyblue --> ## <!-- fit --> 笔记检验概述>…

COCOS2DX3.17.2 Android升级targetSDK30问题解决方案

一、luajit不兼容问题 不兼容版本&#xff1a;【2.1.0-bate2、2.1.0-bate3都存在异常】 出问题系统&#xff1a;Android11&#xff1b;Android10的系统部分机型有问题&#xff0c;部分机型正常 异常点1&#xff1a;c调用lua接口&#xff0c;pushObjiect的时候crash 异常点2…

解决方案中word中分节符的使用

解决方案中必不可少的两个“符号”&#xff0c;分页符&#xff0c;分节符 有了分节符&#xff0c;可以为不同节设置不同的页眉页脚、分栏格式、纸张大小及方向、页边距、不同节间采用不同的页码序号&#xff0c;常用的功能主要是把word下一次的由原来的“竖版”&#xff0c;变…

软件测试必备技能—接口测试

接口测试&#xff0c;其实并没有那么可怕&#xff0c;但是作为测试人员也是必不可少的技能。 接口分为&#xff1a;内部接口和外部接口。 内部接口&#xff1a;是浏览器与服务器的接口。这个很容易理解&#xff0c;web开发一般分前端和后端&#xff0c;前端开发人员用html/cs…

ModuleNotFoundError: No module named ‘paddle.fluid.incubate.fleet‘

在使用rocketqa的时候可能会遇到下面的问题&#xff1a; 问题&#xff1a; 解决方法&#xff1a; 这完全是paddlepaddle的问题。 在rocketqa/utils/optimization.py出现下面的语句&#xff0c;这个时候直接把出错的注释掉就可以&#xff0c;因为它完全没有用到。&#xff08;…

2.Spark的工作与架构原理

概述 目标&#xff1a; spark的工作原理spark数据处理通用流程rdd 什么是rddrdd 的特点 spark架构 spark架构相关进程spark架构原理 spark的工作原理 spark 的工作原理&#xff0c;如下图 图中中间部分是spark集群&#xff0c;也可以是基于 yarn 的&#xff0c;图上可以…

数字频带传输——多进制数字调制及MATLAB仿真

文章目录 前言一、MASK&#xff08;一维信号&#xff09;1、MASK 简介2、MASK 矢量表示 二、MPSK&#xff08;二维信号&#xff09;1、MPSK 简介2、MPSK 矢量表示 三、MQAM&#xff08;二维信号&#xff09;1、MQAM 简介2、MQAM 信号的矢量表示 四、正交 MFSK&#xff08;M维信…

两个字符串的最小ASCII删除和

题目描述 给定两个字符串s1 和 s2&#xff0c;返回 使两个字符串相等所需删除字符的 ASCII 值的最小和 。 示例 思路 这个题的解法一和最长公共子序列的解法大致相同&#xff0c;我们可以在此代码基础上稍微更改即可。 代码如下 解法一 public int minimumDeleteSum1(Stri…

InSAR 数据处理误差的减弱措施

目录 1.失相干误差2.基线误差3.DEM 误差4.大气误差5.解缠误差 6.地理编码误差 本文由CSDN点云侠原创&#xff0c;爬虫网站请自重。 InSAR 获取的干涉相位通常可表示为&#xff1a; φ i n t ( η , ξ ) φ d e f ( η , ξ ) φ a t m ( η , ξ ) φ t o p o ( η , ξ )…

TCP 协议

文章目录 协议格式1面向连接:1.1三次握手&#xff08;建立连接&#xff09;1.2包序管理1.2四次挥手&#xff08;断开连接&#xff09; 2可靠传输:一。保证数据可靠有序的到达对端:确认应答机制超时重传机制 二。提高传输效率:1.提升自身发送数据量滑动窗口机制 rwnd滑动窗口丢包…

对5款驱动软件个人感受

1、基于安全考虑&#xff0c;个人建议优先选用官网可以下载到的版本。 2、拓展&#xff1a; 在线版&#xff1a;普通版&#xff0c;需要安装&#xff0c;且只能联网使用。离线版&#xff1a;把所有驱动都包含在内&#xff0c;无需联网也能安装驱动&#xff0c;一般从大小就可区…

教你怎么用Python每天自动给女朋友免费发短信

今天的教程就是教大家怎么发送免费短信给女朋友。 发送短信接口&#xff0c;我知道的常见的有两个平台&#xff0c;一个是 twilio&#xff0c;可以免费发短信 500 条&#xff0c;可发任意信息&#xff0c;一个是腾讯云&#xff0c;可以免费发短信 100 条&#xff0c;需要申请短…

直播间讨论区需要WebSocket,简单了解下

由于 http 存在一个明显的弊端&#xff08;消息只能有客户端推送到服务器端&#xff0c;而服务器端不能主动推送到客户端&#xff09;&#xff0c;导致如果服务器如果有连续的变化&#xff0c;这时只能使用轮询&#xff0c;而轮询效率过低&#xff0c;并不适合。于是 WebSocket…