在Python中启动mitmproxy,脱离命令行启动mitmproxy监听

举报
frica01 发表于 2024/02/28 20:35:55 2024/02/28
【摘要】 无需通过命令行也能启动mitmproxy监听!! 本文解决了只能通过命令行启动的痛点。

image.png

前言

本文解决了只能通过命令行启动 mitmproxy 的痛点。

在使用 mitmproxy 时候存在这样一个问题,就是每次启动它时候都需要通过命令行启动。
加上最近有位读者向我提问(以前也有读者提问该问题):不通过命令行如何启动 mitmproxy监听?

image.png


不得不说,在刚接触mitmproxy时候,我的确很头疼这个问题。
好在后面研究了一下下,也算是找到了解决方案。

恰好这个时间点,

  • 之前研究过该问题,
  • 有读者再次提问,
  • 加上周末有时间码字。

新仇旧恨一起算,遂有此文。

本文记录了无需通过命令行去启动 mitmproxy,也是统一回复读者问!!!


另:如果对本文中的小工具感兴趣,可以移步到我的🎈🎈妙用PySide6 这个专栏,学习工具的制作,后面我将会更新一系列的PySide6的使用。


知识点📖📖

标题 链接
🎈🎈妙用PySide6 https://frica.blog.csdn.net/category_12185658.html
【Python】通过 Python 设置电脑代理端口 https://frica.blog.csdn.net/article/details/124604558

实现

我更想分享的是解决问题的思路,而不仅仅是分享答案。

之前写过一篇关于在Python设置 Windows系统代理的文章,【Python】通过 Python 设置电脑代理端口,本篇文章在此基础之上,

结合了Pythonossubprocess 模块来调用系统命令;
当然也还有一些零散的Windows系统网络管理命令,这些就不在这里赘述啦!

从而实现了脱离命令行,在ide 就可以启动 mitmproxy


思路

这里阐述一下我是如何处理这个问题的。

启动mitmproxy

  • Python中可以使用winproxy模块去设置Windows系统代理(mitmproxy默认监听8080端口;
  • Python 中的 ossubprocess,可以执行Windows系统的cmd命令;
  • So,以上就解决了设置代理和启动mitmproxy监听;

关闭mirmproxy

  • 结合Windows系统的网络管理命令,使用netstat能够查找到占用8080端口的进程号(PID
  • 然后再调用Windows系统的网络管理命令的 taskkill去杀死指定的 PID
  • 这里又解决了关闭或说是结束mitmproxy监听。

以上,就是整个的思路。
很多时候,思路发散一下,解决问题的方法还是很多的。


小工具展示

该工具可以采集某公众号留言,某乎文章,某博热点等等,仅用于展示。不提供代码

小工具结合了Qt来实现,可视化工具是 PySide6,主要用于展示启动mitmproxy的效果~


另:如果对本文中的小工具感兴趣,可以移步到我的🎈🎈妙用PySide6 这个专栏,学习工具的制作,后面我将会更新一系列的PySide6的使用。

==不提供小工具代码,跟着上面的免费Pyside2专栏学习,你可以做出更好的工具==
==不提供小工具代码,跟着上面的免费Pyside2专栏学习,你可以做出更好的工具==
==不提供小工具代码,跟着上面的免费Pyside2专栏学习,你可以做出更好的工具==


工具展示

使用步骤如下:

  1. 执行程序
  2. 打开监听
  3. 保存文件
  4. 即可看到评论数据了

image.png

工具界面展示

运行程序,小工具的界面如下图框选内容所示,

  • 选择平台:对应某公众号留言,某乎文章,某博热点等
  • 开始监听:打开Windows系统代理
  • 在按下开始监听按钮后,按钮会自动变成停止监听按钮。
  • 停止监听:关闭Windows系统代理
  • 保存文件:点击即可保存mitmproxy监听缓存下来的文件。

image.png

打开

注意看,这里点击了开始监听 按钮后,按钮文本就 变成了 停止监听
这时候去查看Windows系统代理,发现是已经打开了的,并且是预设好的8080端口。

image.png

关闭

注意看,这里点击了停止监听 按钮后,按钮文本就 变成了 开始监听
这时候再去查看Windows系统代理,发现是已经关闭了的。

image.png

代码

代码这里一共就几行,注释我不加了,懒得加。自己看。

无非就是设置Windows系统代理,打开代理,调用cmd执行 mitmproxy的命令,调用Windows系统网络管理命令等,在上面的思路中已经介绍过了。

# -*- coding: utf-8 -*-
# @author: Frica01

import os
import time
from subprocess import Popen


def start_listen():
    Popen('winproxy set --all 127.0.0.1:8080').communicate()
    time.sleep(0.2)
    Popen('winproxy on').communicate()
    time.sleep(0.2)
    Popen(f'mitmdump -s <file_path>/script.py')


def close_listen():
    Popen('winproxy off').communicate()
    result = os.popen('netstat -ano | findstr 8080 | findstr LISTENING')
    port = result.read().split('      ')[-1]
    if port:
        Popen(f'taskkill /f -t /pid {port}')

后话🧐🧐

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

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。