官方文档: 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. JavaScript – 用 Generator 运行异步函数 & await async

    前言 上一篇 JavaScript – Promise 介绍了如何用 JS 编写可读性高的异步函数. 但其实呢, Promise 还不是最好的. 在 es6 之前, Promise 比起回调地狱是好了 ...

  2. POJ-2229 Sumsets(基础dp)

    Farmer John commanded his cows to search for different sets of numbers that sum to a given number. T ...

  3. grid网格布局

    https://ruanyifeng.com/blog/2019/03/grid-layout-tutorial.html Grid 布局只对项目生效 划分网格的线,称为"网格线" ...

  4. [OI] 偏序

    \(n\) 维偏序即给出若干个点对 \((a_{i},b_{i},\cdots,n_{i})\),对每个 \(i\) 求出满足 \(a_{j}\gt a_{i},b_{j}\gt b_{i}\cdot ...

  5. 《Vue.js 设计与实现》读书笔记 - 第15章、编译器核心技术概览

    第15章.编译器核心技术概览 15.1 模板 DSL 的编译器 完整的编译包括 [源代码] -->词法分析-->语法分析-->语义分析(编译前端) -->中间代码生成--> ...

  6. std::make_shared

    std::make_shared 是 C++11 引入的一个标准库函数,用于创建一个 std::shared_ptr,并在堆上分配所需的对象. 它的功能是将对象的创建和 shared_ptr 的初始化 ...

  7. 推荐一款轻量级 eBPF 前端工具 ply

    1 Overview ply 是 eBPF 的 front-end 前端工具之一,专为 embedded Linux systems 开发,采用 C 语言编写,只需 libc 和内核支持 BPF 就可 ...

  8. webgl和canvas的区别

    webgl和canvas的区别 WebGL和Canvas的主要区别在于它们的渲染方式.功能复杂性.以及编程难度.12 渲染方式:Canvas使用2D渲染上下文来绘制图形和图像,基于像素的绘图系统, ...

  9. Linux的Terminal调用不出来,一直转圈圈

    后来发现是环境变量的问题 [oracle@ora19rac01 ~]$ cat .bash_profile # .bash_profile # Get the aliases and function ...

  10. KubeSphere 在 vsleem 的落地实践

    作者:方忠,苏州威视通智能科技有限公司技术经理,开源技术爱好者,长期活跃于 dromara 开源社区并参与贡献. 公司介绍 公司简介 苏州威视通智能科技有限公司,是一家全球领先的全景 AI 平台提供商 ...