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

这篇具有很好参考价值的文章主要介绍了在PyCharm中直接启动mitmproxy并自动打开&关闭系统代理。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

在PyCharm中直接启动mitmproxy并自动打开&关闭系统代理,Python,# 抓包工具,pycharm,ide,python

前言

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

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

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

知识点

模块 作用
mitmproxy 免费和开源的交互式HTTPS代理
atexit 程序在退出时的处理器
winproxy 通过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并自动打开&关闭系统代理,Python,# 抓包工具,pycharm,ide,python

总结

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

后话

本次分享到此结束,
see you~🎉🎉文章来源地址https://www.toymoban.com/news/detail-744288.html

到了这里,关于在PyCharm中直接启动mitmproxy并自动打开&关闭系统代理的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • pycharm打开chrome自动退出解决方法

    最先想到的是版本的问题,我的selenium的版本是4.7.2,不会自动退出的版本是4.4.3。 卸载4.7.2,重新安装4.4.3,问题解决(在设置中找到他,点进去选择想要的版本就可以安装了)

    2024年02月02日
    浏览(54)
  • Pycharm2023.2左右版本出现项目无法自动关闭的问题(真解决方法!)

    目录 1.问题描述及图片 2.网上辣子鸡解决方法简介 3.出现问题的原因以及真正可以解决的方法! 方法就是:关闭自动索引,直接采用本地索引,方法如图: 1.问题描述及图片         问题如上,在退出Pycharm时总是出现正在关闭项目的选项,且长时间无法关闭,需要打开任务

    2024年02月08日
    浏览(46)
  • 解决‘selenium打开浏览器驱动后会自动关闭’的问题

    在学习的时候,遇到使用selenium打开浏览器驱动时,没有写关闭代码,浏览器也会自动关闭,导致在学习不是很方便,代码如下 关于这个情况,我找到了两个解决办法 第一:是因为selenium的版本过高,我原来使用的是4.3版本,把版本降到到3.0即可 卸载selenium:pip uninstall sele

    2024年04月17日
    浏览(59)
  • Rabbitmq 服务启动自动关闭(已解决)

    晚上弄了一晚上都没有弄好,结果配置个环境变量就好了 变量名 RABBITMQ_BASE  变量值 自己安装的Rabbitmq的目录 3. 然后 管理员运行cmd然后打开RabbitMQ安装目录 4. rabbitmq-service.bat remove 5. rabbitmq-service.bat install 6. rabbitmq-plugins enable rabbitmq_management 7. rabbitmq-service.bat start 启动服务

    2024年02月16日
    浏览(48)
  • SpringBoot项目在启动后自动关闭

    问题描述: 今天搭建了一个SpringBoot项目,但是在启动之后就自行关闭了,就像下面这样: 原因分析: 在创建SpringBoot项目的时候,Web的依赖没有导入,默认以普通java项目运行导致的终止。 解决方案: 在pom.xml文件中引入web的jar包,然后刷新maven即可。   执行之后,正常启动

    2024年02月07日
    浏览(42)
  • EXCEL文件打开提示“找不到工程或库”,点击【确定】后自动关闭退出

    最近打开启用宏的excel文件后都会弹出窗口提示:找不到工程或库,点击【确定】后文件直接退出,网上找的一些办法也需要打开文件才能解决,很少有看到比较完整的说这种连文件都无法打开的情况怎么解决的办法,所以记录下现在的解决过程,希望有看到的大神能指点指

    2024年02月04日
    浏览(158)
  • 在docker中启动elasticsearch,启动后又自动关闭

    问题现象:在docker中启动elasticsearch,启动后又自动关闭。具体现象如下图。 解决方法: 1、用docker ps -a查看“容器id”,然后用docker logs -f “容器id”查看日志。 发现是elasticsearch.yml这个配置文件有问题。 我的问题是“:”后没加个空格。 3、docker rm “容器id”,然后重启ela

    2024年02月12日
    浏览(38)
  • SpringBoot项目启动之后自动关闭解决办法

    我们在新建SpringBoot项目的时候,在运行的时候,一会就自动关闭了,这个主要是我们在新建的时候没有选择好依赖包,相当于没有内置的Tomcat,我们运行的Main函数其实就是一个普通的Main函数,所以运行完毕了之后就关闭了,遇到这个问题我们应该如何解决? 首先,检查我们

    2024年02月04日
    浏览(56)
  • 解决python+selenium自动化,打开谷哥浏览器窗口么会自动关闭问题

    # 导包 from selenium import webdriver from selenium.webdriver.common.by import By # 实例化浏览器,且浏览器对象的初始化放在定义的方法函数外,以全局变量的形式使用 wd = webdriver.Chrome() # 已配置环境变量 def get(): #

    2024年02月14日
    浏览(56)
  • 启动HBase shell后,HMaster自动关闭

    使用HBase shell时,执行命令list时出现错误: 即: 原因分析: 启动HBase shell前需分别依次启动Hadoop、HBase。 (1)启动Hadoop 在ubuntu终端执行以下命令 再输入 jps ,出现NameNode, DataNode, SecondaryNameNode说明 Hadoop正常启动 。运行结果截图: (2)启动HBase 再次输入jps查看正在运行的进

    2024年02月02日
    浏览(55)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包