在Python中启动mitmproxy,脱离命令行启动mitmproxy监听
前言
本文解决了只能通过命令行启动 mitmproxy 的痛点。
在使用 mitmproxy 时候存在这样一个问题,就是每次启动它时候都需要通过命令行启动。
加上最近有位读者向我提问(以前也有读者提问该问题):不通过命令行如何启动 mitmproxy监听?
不得不说,在刚接触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 设置电脑代理端口,本篇文章在此基础之上,
结合了Python 的 os 和 subprocess 模块来调用系统命令;
当然也还有一些零散的Windows系统网络管理命令,这些就不在这里赘述啦!
从而实现了脱离命令行,在ide 就可以启动 mitmproxy。
思路
这里阐述一下我是如何处理这个问题的。
启动mitmproxy
- 在Python中可以使用winproxy模块去设置Windows系统代理(mitmproxy默认监听8080端口;
- Python 中的 os 和 subprocess,可以执行Windows系统的cmd命令;
- So,以上就解决了设置代理和启动mitmproxy监听;
关闭mirmproxy
- 结合Windows系统的网络管理命令,使用netstat能够查找到占用8080端口的进程号(PID
- 然后再调用Windows系统的网络管理命令的 taskkill去杀死指定的 PID
- 这里又解决了关闭或说是结束mitmproxy监听。
以上,就是整个的思路。
很多时候,思路发散一下,解决问题的方法还是很多的。
小工具展示
该工具可以采集某公众号留言,某乎文章,某博热点等等,仅用于展示。不提供代码
小工具结合了Qt来实现,可视化工具是 PySide6,主要用于展示启动mitmproxy的效果~
另:如果对本文中的小工具感兴趣,可以移步到我的🎈🎈妙用PySide6 这个专栏,学习工具的制作,后面我将会更新一系列的PySide6的使用。
==不提供小工具代码,跟着上面的免费Pyside2
专栏学习,你可以做出更好的工具==
==不提供小工具代码,跟着上面的免费Pyside2
专栏学习,你可以做出更好的工具==
==不提供小工具代码,跟着上面的免费Pyside2
专栏学习,你可以做出更好的工具==
工具展示
使用步骤如下:
- 执行程序
- 打开监听
- 保存文件
- 即可看到评论数据了
工具界面展示
运行程序,小工具的界面如下图框选内容所示,
- 选择平台:对应某公众号留言,某乎文章,某博热点等
- 开始监听:打开Windows系统代理
- 在按下开始监听按钮后,按钮会自动变成停止监听按钮。
- 停止监听:关闭Windows系统代理
- 保存文件:点击即可保存mitmproxy监听缓存下来的文件。
打开
注意看,这里点击了开始监听 按钮后,按钮文本就 变成了 停止监听,
这时候去查看Windows系统代理,发现是已经打开了的,并且是预设好的8080端口。
关闭
注意看,这里点击了停止监听 按钮后,按钮文本就 变成了 开始监听
这时候再去查看Windows系统代理,发现是已经关闭了的。
代码
代码这里一共就几行,注释我不加了,懒得加。自己看。
无非就是设置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~
- 点赞
- 收藏
- 关注作者
评论(0)