mmitmproxy 抓包工具使用

news2024/11/14 21:21:52

mitmproxy 抓包工具使用

前言

本章内容均来自,《Python3 网络爬虫开发实战》- 崔庆才,在学习过程中,遇到写问题故此记录一下

学习本文章前确保准备好如下内容:

  • 安装并成功运行 mumu 安卓模拟器

mitmproxy 介绍

mitmproxy是一个支持HTTP/HTTPS 协议的抓包程序,和 Fiddler、Charles有类似的功能,只不过它以控制台的形式操作。

mitmproxy还有两个关联组件。一个是mitmdump,这是mitmproxy的命令行接口,利用它我们可以对接 Python 脚本,用Python 实现监听后的处理。另一个是mitmweb,这是一个 Web 程序,通过它我们可以清楚地观察到mitmmproxy捕获的请求。

mitmproxy 功能

mitmproxy有如下几项功能:

  • 拦截 HTTP/HTTPS 的请求和响应;
  • 保存并分析HTTP会话;模拟客户端发起请求
  • 模拟服务端返回响应;
  • 利用反向代理将流量转发给指定服务器;
  • 支持 Mac 系统和 Linux 系统上的透明代理;
  • 利用 Python 实时处理 HTTP请求和响应。

整体来看,mitmproxy相当于一个命令行版本的Charles,同样可以捕获与修改请求内容和响应内容。其实,相比 Charles,mitmproxy最有优势的是它的关联组件 mitmdump,mitmdump 可以使用 Python脚本实时处理请求和响应,功能非常强大。

准备工作

安装 mitmproxy

安装参考链接: https://setup.scrape.center/mitmproxy

mumu模拟器证书配置

1.打开文件共享
在这里插入图片描述

在这里插入图片描述

  1. mitmproxy-ca-cert.pem 复制到 共享文件中 >
    在这里插入图片描述

  2. 添加代理

查看IP -> 启动 MuMu 模拟器,点 设置 -> 网络和互联网 -> 互联网 -> WLAN 开启状态 -> WiredSSID -> 代理 。配置代理
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
4. 安装证书

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

基本使用

运行 mitmproxy

mitmproxy 

在这里插入图片描述

在手机上访问百度,mitmproxy 页面上都会呈现出这个工程的请求。
在这里插入图片描述

这也相当于我们之前在浏览器开发者工具中监听得到的内容。

  • 图中左下角显示的 19/46代表一共产生了 46个请求,箭头当前所指的请求是第19个。
  • 每个请求的开头都有一个CET或POST,这是请求方法,
  • 后面紧接的内容是请求URL,URL之后是请求对应的响应状态码,
  • 其后是响应内容的类型(例如 text/html 代表网页文档、image/jpeg代表图片),
  • 再后面是响应体的大小和响应时间。

总之当前页面呈现了所有请求和响应的概览,我们可以通过这个页面观察所有的请求。

如果想查看某个请求的详情,可以通过上下键切换,选中这个请求后按下回车键,进入请求的详情页面,如图所示。

在这里插入图片描述

  • 从图中,可以看到请求头的详细信息,例如Host、Cookie等。
  • 图的上方有 Request、Response和 Detai1三个选项,
  • 当前是打开了Request选项。
  • 按下Tab键切换至 Response 选项卡,查看请求对应的响应详情,

开始的内容是响应头的信息,下拉之后可以看到响应体的信息。针对当前请求,响应体就是网页的源代码。此时再按 Tab键,切换到最后一个选项卡Detai1,即可看到当前请求的详细信息,如服务器的 IP 和端口、HTTP 协议版本、客户端的IP 和端口等.
在这里插入图片描述

mitmproxy 还提供了命令行式的编辑功能,使我们可以重新编辑请求。按下E键即可进入编辑页这时它会询问要编辑哪部分内容,选项有cookies、query、url等,如图所示
在这里插入图片描述
按下要编辑内容对应的索引键即可进入编辑页面,例如按下数字6键,进入编辑请求URL的参数 Query Strings的页面,如图 12-24所示。我们可以按下D键删除当前的QueryStrings,然后按下 A键新增一行,输人新的 Key 和 Value。

这里我们分别输人wd和NBA。之后按下Esc键和O键返回请求的详情页面,可以看到请求 URL里多了一个 wd=NBA 的参数,如图 所示。
在这里插入图片描述
接着按下E键和数字4键,进入编辑Path的页面,如图1所示。和上面流程一样,按下D键和 A 键修改 Path 的内容。
在这里插入图片描述

这里我们将 Path 修改为 s。之后按下 Esc 键和 O键返回请求的详情页面,可以看到请求 URL变成了 htps://m.baidu.com/s?wd=NBA,访问这个页面,结果如图12-27所示,这和用百度搜索关键词 NBA的返回结果一样。
在这里插入图片描述

接下来,按下R键重新发送修改后请求,可以看到请求旁边多了一个回旋箭头
在这里插入图片描述

mitmdump 实时抓包处理

正是由于 mitmdump可以对接 Python 脚本,因此我们在 Python 脚本中获得请求和响应的内容时就可以顺便添加一些解析、存储数据的逻辑,这样就实现了数据的抓取和实时处理。

引入

启动mitmdump:

mitmdump -s script.py

这里使用 -s参数指定了本地脚本script.py 为处理脚本,用来处理抓取的数据,需要将其放置在当前命令的执行目录下。

def request(flow):  
    flow.request.headers['User-Agent'] = 'Mitmproxy'  
    print(flow.request.headers)  

运行启动命令后,在手机端访问 http://www.httpbin.org/get,可以看到手机端显示的页面显示如图 所示。

在这里插入图片描述

日志输出

mitmdump提供了专门的日志输出功能,可以设定以不同的颜色输出不同级别的结果。
修改 script.py :

from mitmproxy import ctx  

def request(flow): 
    flow.request.headers['User-Agent'] = 'Mitmproxy' 
    print(flow.request.headers) 
    ctx.log.info(str(flow.request.headers)) 
    ctx.log.warn(str(flow.request.headers)) 
    ctx.log.error(str(flow.request.headers)) 

这里调用了 ctx模块,它有一个名为1og的功能,调用不同的输出方法可以输出不同颜色的结果,以便我们更直观、方便地调试(例如,

  • 调用info 方法输出的结果为白色,
  • 调用 warn 方法输出的结果为黄色,
  • 调用error 方法输出的内容为红色)。
    上述代码的运行结果如图所示。
    在这里插入图片描述

请求

script.py 修改如下:

from mitmproxy import ctx

def request(flow):
    url = 'https://www.baidu.com'
    flow.request.url = url
    request = flow.request
    info = ctx.log.info
    info(request.url)
    info(str(flow.request.headers))
    info(str(flow.request.cookies))
    info(request.host)
    info(request.method)
    info(str(request.prot))
    info(request.scheme)

这里直接将请求URL修改成了百度,如图所示:
在这里插入图片描述

浏览器最上方呈现的网址还是 http://www.httpbin.org,而页面已经变成了百度首页。我们用简单的脚本就成功修改了目标网站,意味着这种方式使修改和伪造请求变得轻而易举,这也是中间人攻击。

响应

响应体才是要爬取的结果。和请求一样,mitmdump 针对响应也提供了对应的处理接口,就是response方法:

def response(flow):
    response = flow.response
    info = ctx.log.info
    info(str(response.status_code))
    info(str(response.headers))
    info(str(response.cookies))
    info(str(response.text))

将 script.py 脚本修改为如上内容,然后用手机访问 [http://www,htpbin.org/get],电脑端控制台会输出响应状态码、响应头、响应 Cookie 和响应体几个属性,其中最后一个就是网页的源代码。电脑端控制台的输出结果如图所示。

在这里插入图片描述
成功完成爬取了
我们通过response方法获取了每个请求对应的响应内容,接下来对响应信息进行提取和存储,就

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2093448.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【小记】excel函数 vlookup,hyperlink,批量修改文件名称

统计是否缺少文件【hlook函数】,超链接到对应文件【hyperlink函数】,批量修改文件名称 统计是否缺少文件【hlook函数】step1:路径复制进表格step2:处理文件名称step3:使用vlookup函数 超链接到对应文件【hyperlink函数…

【MySQL】插入优化篇——(少量插入数据优化&批量插入数据load指令)

前言 大家好吖,欢迎来到 YY 滴MySQL系列 ,热烈欢迎! 本章主要内容面向接触过C Linux的老铁 主要内容含: 欢迎订阅 YY滴C专栏!更多干货持续更新!以下是传送门! YY的《C》专栏YY的《C11》专栏YY的…

axios响应

一.axios请求配置项(axios在调用时所接收的参数对象) 以下是请求时可用的配置选项,只有url是必须的,如果没有指定method,请求将默认使用get方法 { // url 是用于请求的服务器 URL url: "/user", // method 是创建请…

二叉树的相关oj题目 — java实现

二叉树的所有相关oj题 题目翻转二叉树判断两颗树是否相同对称二叉树判断一棵二叉树是否为另一颗的子树平衡二叉树方法1:方法2:(更快) 二叉树的层序遍历二叉树的层序遍历II最近公共祖先方法1:方法2: 二叉树的…

实操经验 | Apache 基金会顶级项目版本管理和发布流程

前言 前段时间,Apache SeaTunnel经过几个月的迭代和架构升级,终于迎来第一个正式2.3.0版本,我也有幸作为本次的Release Manager,体验了一把从0到1的Apache发版流程,不得不说Apache基金会在项目的版本管理这块有着完善…

从报名到领证:软考中级系统集成项目管理工程师考试全流程指南

本文共计11564字,预计阅读38分钟。包括七个篇章:报名、准考证打印、备考、考试、成绩查询、证书领取及常见问题。 一、报名篇 报名条件要求: 1.凡遵守中华人民共和国宪法和各项法律,恪守职业道德,具有一定计算机技术…

数字化转型的内容框架解析,附华为数字化转型内容框架及方法论

数字化转型的内容框架是一个系统性、多维度的体系,旨在通过数字技术的融入和应用,对传统业务、流程和模式进行重构、升级,以提升效率、创造更多价值。以下是对数字化转型内容框架的详细阐述: 一、总体要求 数字化转型的总体要求…

07:为电源和GND分配网络颜色

1.创建电源类和GND类 2为电源和GND分配颜色

Pyqt5高级技巧2:Tab顺序、伙伴快捷键、各类常用控件的事件(含基础Demo)

一、编辑Tab顺序 点击下面这个按钮后,按控件调整tab的顺序,设置好后,鼠标聚焦在输入框1中,按一下tab鼠标聚焦会跳到下一个输入框中 编辑tab结束后,按下面这个按钮重新返回页面布局 二、编辑伙伴 (删除伙伴…

会声会影和剪映哪个好?会声会影和剪映对比详解,视频剪辑软件推荐

随着社交媒体和网络视频的发展,在线视频编辑工具也变得越来越受欢迎。在视频编辑软件中,会声会影和剪映都是非常受欢迎的选择。它们都具有用户友好的界面和强大的功能,可以满足不同用户的需求。那么,哪一个软件更好呢?…

【OpenCV】初步认识 OpenCV

文章目录 1. OpenCV 简介 1. OpenCV 简介 🐧OpenCV是应用广泛的开源图像处理库。OpenCV用C语言编写,它具有C、Java、Pyhthon等接口,并支持Windows、Linux、Android,OpenCV主要倾向于实时视觉应用领域。 OpenCV应用领域&#xff1…

华为云征文|部署内容管理系统 Joomla

华为云征文|部署内容管理系统 Joomla 一、Flexus云服务器X实例介绍1.1 云服务器介绍1.2 应用场景1.3 核心竞争力 二、Flexus云服务器X实例配置2.1 重置密码2.2 服务器连接2.3 安全组配置 三、部署 Joomla3.1 Joomla 介绍3.2 Docker 环境搭建3.3 Joomla 部署3.4 Joom…

谈一谈JVM的GC(垃圾回收)

JVM(Java Virtual Machine)的GC(Garbage Collection,垃圾回收)是Java语言的一个重要特性,它负责自动管理内存,释放那些不再被使用的对象所占用的内存空间。以下是对JVM GC的详细介绍&#xff1a…

Nginx: 使用KeepAlived配置实现虚IP在多服务器节点漂移及Nginx高可用原理

使用KeepAlived配置实现虚IP在多服务器节点漂移 1 )环境准备 2台 linux , 一主一备 节点1:192.168.184.30 CentOS 7 Master节点2:192.168.184.40 CentOS 7 BackupVIP 192.168.184.50 安装 KeepAlived, $ yum install keepalived 注意&#x…

前端源码解读:前端小白也能轻松理解的axios源码

作为前端开发的小伙伴,你肯定对 axios 这个超级好用的 HTTP 请求库不陌生吧?它不仅操作简单,功能还特别强大,难怪大家都爱用!但你知道吗?axios 的魅力可不仅仅在于它的好用,真正让人佩服的是它源…

jmeter 响应乱码

Jmeter在做接口测试的时候的,如果接口响应的内容中有中文,jmeter的响应内容很可能显示乱码,为了规避这种出现乱码的问题,就要对jmeter的响应结果进行编码处理。 打开jmeter进行接口、压力、性能等测试,出现以下乱码问…

[Algorithm][综合训练][体育课测验(二)][合唱队形][宵暗的妖怪]详细讲解

目录 1.体育课测验(二)1.题目链接2.算法原理详解 && 代码实现 2.合唱队形1.题目链接2.算法原理详解 && 代码实现 3.宵暗的妖怪1.题目链接2.算法原理详解 && 代码实现 1.体育课测验(二) 1.题目链接 体育课测验(二) 2.算法原理详解 && 代码实现…

数据结构-队列的介绍及循环队列

1.队列的概念 在开始前,请牢记这句话:队列是一个先进先出的数据结构。 队列(queue)是限定在表的一端进行插入,表的另一端进行删除的数据结构,如同栈的学习,请联系前文所学链表,试想…

python 安装

下载 Download Python | Python.org 安装

jquery下载的例子如何应用到vue中

参考测试圈相亲平台开发流程(4):选个漂亮的首页 (qq.com) 下载的文件夹解压到v_love项目的pubilc下的static文件夹内,这里放的都是我们的静态资源。 打开文件夹内的index.html,我们先确定下它是不是我们要的东西&…