首页 > 其他分享 >抓包工具之MitmProxy

抓包工具之MitmProxy

时间:2024-07-25 09:57:02浏览次数:15  
标签:__ mitmproxy url self MitmProxy appmsg mp 工具 抓包

官方文档: 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 证书 和手机端的证书,都安装一下

注意: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

 

标签:__,mitmproxy,url,self,MitmProxy,appmsg,mp,工具,抓包
From: https://www.cnblogs.com/xingxia/p/18322376/mitmProxy

相关文章

  • 轻抖短视频创作工具 — 创意无限,效率翻倍
    AI赋能,创作更轻松AI分镜:智能拆分多场景,让每个瞬间都精准呈现。️AI图片:版权无忧,创意无限。剪辑升级,效率飞跃批量剪辑:一键裁剪,自动导出,效率翻倍。智能滤镜:多重滤镜,任意转换,效果出众。声音魔法,配音新体验️AI配音:千种音色,为创作增色添彩。数据洞察,洞察先机数据榜单:实......
  • 一款强大且免费开源的多连接数据库管理工具
    大家好,今天给大家分享一款免费开源的跨平台数据库管理工具DbGate。DbGate是一款免费开源的跨平台数据库管理工具,支持多种数据库,包括MySQL、PostgreSQL、SQLServer、MongoDB、SQLite等。它可以在Windows、Linux、Mac操作系统上运行,也可以作为Web应用程序使用,为用户提供跨平台......
  • PHP转Go系列 | 推荐一个强大的Go语言工具函数库
    大家好,我是码农先森。从PHP转到Go的朋友,常常会因为没有便捷的工具函数而感到苦恼。PHP写的多了就会形成路径依赖,在写Go的时候时不时就会想到PHP强大的数组函数。当然写Go的PHPer也想拥有这么强大的工具函数,在这个开源的编程世界总有一些伟大的程序员做着贡献,正是有......
  • 数据仓库建模工具之一——Hive学习第六天
    2、Hive分桶(接着前面hive分区开始学习)2.1 业务场景数据分桶的适用场景:分区提供了一个隔离数据和优化查询的便利方式,不过并非所有的数据都可形成合理的分区,尤其是需要确定合适大小的分区划分方式不合理的数据分区划分方式可能导致有的分区数据过多,而某些分区没有什么数据的尴......
  • OpenAI 最新发布的 GPT-4o mini 模型:开发者的高效创新工具
    引言原文链接OpenAI最新发布的GPT-4omini模型以其卓越的性能和极具竞争力的价格引发了广泛关注。作为开发者,您是否已经开始探索这个"迄今为止最具成本效益的小模型"?本次活动旨在鼓励开发者分享使用GPT-4omini及其他大型语言模型的经验,探讨如何有效利用这些工具来提......
  • 销售管理系统推荐:13款必选工具对比分析
    13款销售管理系统推荐:纷享销客、ZohoCRM、销售易、用友、红圈销售、销帮帮、智邦国际、Salesforce、Pipedrive、MicrosoftDynamics365、Insightly、NetSuite、HubSpot。在如今竞争激烈的市场中,选择一款合适的销售管理系统成了每个企业的关键决策。面对琳琅满目的软件,如何找......
  • Java中的多线程调试技术与工具
    Java中的多线程调试技术与工具大家好,我是微赚淘客系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!在多线程Java应用程序中,调试是一个重要而复杂的任务。多线程程序的调试比单线程程序更加困难,因为你需要考虑线程的同步、死锁、竞态条件等问题。本文将探讨多线程调试的技术和......
  • web-cft-工具安装
    web-信息泄露dirmap目录扫描工具1、定义:一个高级web目录扫描工具,功能将会强于DirBuster、Dirsearch、cansina、御剑2、安装(1)gitclonehttps://github.com/H4ckForJob/dirmap(2)进入dirmap;输入python3dirmap.py-i目标url-lcf(3)示例:CTFhub-信息泄露-git泄露;会将状态码......
  • DRF入门规范,API接口,接口测试工具,restful规范,序列化和反序列化,drf安装和快速使用
    ⅠDRF入门规范【一】Web应用模式在开发Web应用中,有两种应用模式:【1】前后端不分离【2】前后端分离【3】前后端开发模式#1前后端混合开发-不少公司在用-flask混合-django混合-例如最简单的bbs项目-模板:dtl语法:djangotemplatelanguage模板语......
  • [java][工具使用]使用hutool解析json
    使用hutool解析json注意点:1.数组和字典接受的对象和方法不一样        数组使用JSONArray       字典使用JSONObject2.如果字典中提取不存在的key,返回的结果nullpackagecn.npsel.test;importcn.hutool.json.JSONArray;importcn.hutool.json.JSONOb......