官方文档: https://mitmproxy.org/

github:https://github.com/mitmproxy/mitmproxy

缘起: 之前使用过几个抓包工具, 例如fiddler和charles, 但是这些都是已经开发成品, 不好进行二次开发, 而mitm可以使用Python进行定制化开发,方便抓包获取数据

开始

mitmproxy 是一个支持 HTTP 和 HTTPS 的抓包程序,有类似 Fiddler 的功能。

mitmproxy 还有两个关联组件。一个是 mitmdump,它是 mitmproxy 的命令行接口,可以利用 Python 代码监听请求。另一个是 mitmweb,它是一个 Web 程序,可以观察 mitmproxy 抓取的请求。

安装

pip install mitmproxy

安装好之后,将手机端的代理 IP 设置为和 PC 的 IP 地址一样,和代理端口设置为:8080,用下面命令启动

mitmweb

将看到浏览器打开了一个 http://127.0.0.1:8081/#/flows 网页,这个就是 MitmProxy 的 web 控制台

使用

在手机端浏览器输入 mitm.it 获取 PC 证书 和手机端的证书,最好都安装一下, 方便后面抓取移动端和PC端的包

注意:android 手机在安装证书时需要在[从存储设备安装]界面安装

实例: 抓取微信的公众号文章的阅读,点赞,分享等数据

当安装好证书和设置好手机端 IP 代理后,随便点击一篇微信公众号文章

body 里面有二三十个数据其实都只需要其中7个,分别是 __biz, mid, idx,sn 这四个参数是获取公众号文章内容的基石,可以在文章 url 处获得。

其他三个参数的数据是固定的分别是 is_only_read = 1,is_temp_url = 0,appmsg_type = 9。getappmsgext 请求中的 appmsg_token 是一个有时效性的参数。

分析完链接后就可以写代码了

# articles.py
import html
import requests
import utils
from urllib.parse import urlsplit
class Articles(object):
"""文章信息"""
def __init__(self, appmsg_token, cookie):
# 具有时效性
self.appmsg_token = appmsg_token self.headers = {
"User-Agent": "Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0Chrome/57.0.2987.132 MQQBrowser/6.2 Mobile",
"Cookie": cookie
} self.data = {
"is_only_read": "1",
"is_temp_url": "0",
"appmsg_type": "9",
}
def read_like_nums(self, article_url):
"""获取数据"""
appmsgstat = self.get_appmsgext(article_url)["appmsgstat"]
return appmsgstat["read_num"], appmsgstat["old_like_num"], appmsgstat["like_num"]
def get_params(self, article_url):
"""
获取到文章url上的请求参数
:param article_url: 文章 url
:return:
"""
# url转义处理
article_url = html.unescape(article_url)
"""获取文章链接的参数"""
url_params = utils.str_to_dict(urlsplit(article_url).query, "&", "=")
return url_params
def get_appmsgext(self, article_url):
"""
请求阅读数
:param article_url: 文章 url
:return:
"""
url_params = self.get_params(article_url)
appmsgext_url = "https://mp. weixin.qq.com/mp/getappmsgext?appmsg_token={}&x5=0".format(self.appmsg_token)
self.data.update(url_params)
appmsgext_json = requests.post(
appmsgext_url, headers=self.headers, data=self.data).json()
if "appmsgstat" not in appmsgext_json.keys():
raise Exception(appmsgext_json)
return appmsgext_json
if __name__ == '__main__':
info = Articles('1068_XQoMoGGBYG8Tf8k23jfdBr2H_LNekAAlDDUe2aG13TN2fer8xOSMyrLV6s-yWESt8qg5I2fJr1r9n5Y5', 'rewardsn=; wxtokenkey=777; wxuin=1681274216; devicetype=android-29; version=27001037; lang=zh_CN; pass_ticket=H9Osk2CMhrlH34mQ3w2PLv/RAVoiDxweAdyGh/Woa1qwGy2jGATJ6hhg7syTQ9nk; wap_sid2=COjq2KEGEnBPTHRVOHlYV2U4dnRqaWZqRXBqaWl3Xy1saXVWYllIVjAzdlM1VkNDNHgxeWpHOG9pckdkREMwTFEwYmNWMl9FZWtRU3pRRnhDS0pyV1BaZUVMWXN1ZWN0WnZ6aHFXdVBnbVhTY21BYnBSUXNCQUFBMLLAjfgFOA1AAQ==')
a, b,c = info.read_like_nums('http://mp. weixin.qq.com/s?__biz=MzU1NDk2MzQyNg==&mid=2247486254&idx=1&sn=c3a47f4bf72b1ca85c99190597e0c190&chksm=fbdad3a3ccad5ab55f6ef1f4d5b8f97887b4a344c67f9186d5802a209693de582aac6429a91c&scene=27#wechat_redirect')
print(a, b, c)

动态获取 cookie 和 appmsg_token

appmsg_token 是一个具有时效性的参数,和 cookie 一样是需要改变的,当这两个参数过期时就需要从抓包工具(MitmProxy 中)ctrl+C,ctrl+V到代码中,很是麻烦。

MitmProxy 可以使用命令行接口 mitmdumvp 运行 Python 代码监听抓取的链接,如果抓到了 https://mp. weixin.qq.com/mp/getappmsgext 就保存在本地文件并退出抓包

mitmdump 命令

# -s 运行的python脚本, -w 将截取的内容保持到文件
mitmdump -s write_cookie.py -w outfile mp.weixin.qq.com/mp/getappmsgext

write_cookie.py

# coding: utf-8
# write_cookie.py
import urllib
import sys
from mitmproxy import http
# command: mitmdump -s write_cookie.py -w outfile mp.weixin.qq.com/mp/getappmsgext
class WriterCookie:
"""
mitmproxy的监听脚本,写入cookie和url到文件
"""
def __init__(self, outfile: str) -> None:
self.f = open(outfile, "w")
def response(self, flow: http.HTTPFlow) -> None:
"""
完整的response响应
:param flow: flow实例,
"""
# 获取url
url = urllib.parse.unquote(flow.request.url)
# 将url和cookie写入文件
if "mp. weixin.qq.com/mp/getappmsgext" in url:
self.f.write(url + '\n')
self.f.write(str(flow.request.cookies))
self.f.close()
# 退出
exit()
# 第四个命令中的参数
addons = [WriterCookie(sys.argv[4])]

常见问题:

1.

mitmproxy:ImportError: DLL load failed while importing _brotli: 找不到指定的模块

根据操作系统下载对应模块: https://support.microsoft.com/en-gb/help/2977003/the-latest-supported-visual-c-downloads

2.Windows环境下下载证书会出现问题:http://mitm.it/cert/p12

暂时未找到解决方案, 待后续

3.若打开mitm.it没有出现下载证书的页面,则需要该浏览器或者电脑的代理设置为mitmproxy服务的代理, 才可以正常展示

更多参考:

抓包工具之MitmProxy的更多相关文章

  1. mitmproxy抓包工具

    中文官网 https://ptorch.com/docs/10/mitmproxy-concepts-options mitmproxy抓包工具 1. mitmproxy 介绍与安装 需要安装pyth ...

  2. 从零开始学mitmproxy抓包工具

    Man In The Middle mitm是Man In The Middle的首字母缩写,意思是位于中间的人,表明mitmproxy是一个代理,可以拦截请求,实现网络抓包.知名的网络抓包工具有Fi ...

  3. Android利用Fiddler进行网络数据抓包,手机抓包工具汇总

    Fiddler抓包工具 Fiddler抓包工具很好用的,它可以干嘛用呢,举个简单例子,当你浏览网页时,网页中有段视频非常好,但网站又不提供下载,用迅雷下载你又找不到下载地址,这个时候,Fiddler抓 ...

  4. Charles 抓包工具安装和采坑记录

    Charles 抓包工具安装和采坑记录 网络抓包是解决网络问题的第一步,也是网络分析的基础.网络出现问题,第一步肯定是通过抓包工具进行路径分析,看哪一步出现异常.做网络爬虫,第一步就是通过抓包工具对目 ...

  5. Android利用Fiddler进行网络数据抓包,手机抓包工具汇总,使用mono运行filddler

    Fiddler抓包工具 Fiddler抓包工具很好用的,它可以干嘛用呢,举个简单例子,当你浏览网页时,网页中有段视频非常好,但网站又不提供下载,用迅雷下载你又找不到下载地址,这个时候,Fiddler抓 ...

  6. Jmeter实现登录bugfree、新建bug、解决bug脚本(抓包工具实现)

    环境 Chrome jmeter3.1 fiddler4 win7 32位 Linux CentOs6.4 bugfree3.0.1 链接:http://pan.baidu.com/s/1gfHpbp ...

  7. 抓包工具Wireshark过滤器

    抓包工具WireShark分为两种过滤器: 捕捉过滤器(CaptureFilters) 显示过滤器(DisplayFilters) 捕捉过虑器语法: Protocol  Direction  Host ...

  8. 跨平台网络抓包工具-Microsoft Message Analyzer

    Microsoft Message Analyzer (MMA 2013)是微软最受欢迎的Netmon的最新版本. 在Netmon网络跟踪和排除故障功能的基础上提供了更强大的跨平台网络分析追踪能力.园 ...

  9. Microsoft Message Analyzer (微软消息分析器,“网络抓包工具 - Network Monitor”的替代品)官方正式版现已发布

    来自官方日志的喜悦 被誉为全新开始的消息分析器时代,由MMA为您开启,博客原文写的很激动,大家可以点击这里浏览:http://blogs.technet.com/b/messageanalyzer/a ...

  10. 网络抓包工具-Wireshark学习资料

    wireshark一个非常牛逼的网络抓包工具.转载一系列博文 一站式学习Wireshark(一):Wireshark基本用法 一站式学习Wireshark(二):应用Wireshark观察基本网络协议 ...

随机推荐

  1. NOIP 考前板子复习

    点双 注意两个点,特判单点,是 son = 0 且 fa = 0,因为自环,还有弹栈弹到儿子节点处,因为点双不一定由割点弹出. code void dfs(int u, int la) { int s ...

  2. opencv equalizeHist

    ''' What are histograms? Histograms are collected counts of data organized into a set of predefined ...

  3. 【论文解读】System 2 Attention提高大语言模型客观性和事实性

    一.简要介绍       本文简要介绍了论文"System 2 Attention (is something you might need too) "的相关工作.基于trans ...

  4. QT数据可视化框架编程实战之三维柱状图从入门到精通_补天云QT技术培训专家

    QT数据可视化框架编程实战之三维柱状图从入门到精通_补天云QT技术培训专家 简介 本文将介绍QT数据可视化框架(QT DataVisualization 模块)编程实战之三维柱状图(Q3DBars)的 ...

  5. 如何在SQL中查找某一字段在哪些表中

    在SQL中,要找出数据库中包含特定字段(列)的所有表,可以使用数据库的系统表或信息架构视图.不同的数据库系统(如MySQL, SQL Server, PostgreSQL等)有不同的系统表和查询方式. ...

  6. linux java 初始环境配置

    linux初始环境配置 1.设置IP 查看虚拟机ip地址:ip addr 修改ip地址 Vi /etc/sysconfig/network~scrips/ifcfg-ens33(不一定是33 动态的) ...

  7. Serilog文档翻译系列(八) - 记录器的生命周期、可靠性

    01.记录器的生命周期 Serilog 大多数情况下"只需使用",并且在创建和处理日志记录器时不需要过多考虑.然而,由于以下原因: 某些接收器(sink)涉及后台进程,特别是那些使 ...

  8. 前端 面试 html css 如何让一个盒子水平垂直居中?

    方法1  使用子绝父相 定位  推荐 说明: 让父元素相对定位,因为要让子元素以父元素为参考对象,如果父元素不设置定位,子元素的参考对象就是整个页面document: 子元素绝对定位,top:50%: ...

  9. C#的函数使用 和参数修饰符 out ref params

    // 函数和方法 // 函数好比对象的动作行为 在定义函数的时候,职责(作用/功能)越单一越好 满足高内聚 低耦合的开发思路 // 变量的命名规则 小驼峰 // 函数的命名规则 大驼峰 动词开头 // ...

  10. 将数组数据转化成树形结构 tranListToTreeData

    export function tranListToTreeData(list, rootValue) { // list是最完整的数组 let arr = []; // 记录儿子 list.forE ...