使用 MitmProxy 玩爬虫的,这篇文章别错过了!

2024-05-15 12:08

本文主要是介绍使用 MitmProxy 玩爬虫的,这篇文章别错过了!,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

这是「进击的Coder」的第 399 篇技术分享

作者:李运辰

来源:Python 研究者

阅读本文大概需要 7 分钟。

玩爬虫的小伙伴都知道,抓包工具除了 MitmProxy 外,还有 Fiddler、Charles 以及浏览器 netwrok 等

既然都有这么多抓包工具了,为什么还要会用 MitmProxy 呢??今天教大家使用 MitmProxy  抓包工具的原因,主要有以下几点:

  1. 不需要安装软件,直接在线(浏览器)进行抓包(包括手机端和 PC 端)

  2. 配合 Python 脚本抓包改包(下面会有案例)

  3. 抓包过程的所有数据包都可以自动保留到 txt 里面,方便过滤分析

  4. 使用相对简单,易上手。

1. 配置MitmProxy

MitmProxy 可以说是客户端,也可以说是一个 python 库

方式一:客户端

https://mitmproxy.org/downloads/

在这个地址下可以下载对应的客户端安装即可

方式二:Python 库

pip install mitmproxy

通过这个 pip 命令可以下载好 MitmProxy,下面将会以 Python 库的使用方式给大家讲解如何使用(推荐方式二)

2. 启动MitmProxy

MitmProxy 启动有三个命令(三种模式)

  1. mitmproxy,提供命令行界面

  2. mitmdump,提供一个简单的终端输出(还可以配合 Python 抓包改包)

  3. mitmweb,提供在线浏览器抓包界面

mitmdump 启动

mitmdump -w d://lyc.txt

这样就启动 mitmdump,接着在本地设置代理 Ip 是本机 IP,端口 8080

安装证书

访问下面这个链接

http://mitm.it/

可以选择自己的设备(window,或者 Android、Apple 设备去)安装证书。

然后随便打开一个网页,比如百度

这里是因为证书问题,提示访问百度提示 https 证书不安全,那么下面开始解决这个问题,因此就引出了下面的这种启动方式

浏览器代理式启动

哪一个浏览器都可以,下面以 Chrome 浏览器为例(其他浏览器操作一样)

先找到 chrome 浏览器位置,我的 chrome 浏览器位置如下图

通过下面命令启动

"C:\Users\Administrator\AppData\Local\Google\Chrome\Application\chrome.exe" --proxy-server=127.0.0.1:8080 --ignore-certificate-errors
  • --proxy-server 是设置代理和端口

  • --ignore-certificate-errors是忽略证书

然后会弹出来 Chrome 浏览器,接着我们搜索知乎

在 cmd 中就可以看到数据包

这些文本数据可以在编程中进行相应的操作,比如可以放到 python 中进行过来监听处理。

3. 启动Mitmweb

新开一个 cmd(终端)窗口,输入下来命令启动 mitmweb

mitmweb

之后会在浏览器自动打开一个网页(其实手动打开也可以,地址就是:http://127.0.0.1:8081)

现在页面中什么也没有,那下面我们在刷新一个知乎页面

重点:关闭 mitmproxy 终端!关闭 mitmproxy 终端!关闭 mitmproxy 终端!

如果不改变在 mitmweb 中获取不到数据,数据只在 mitmproxy 中,因此需要关闭 mitmproxy 这个命令终端

刷新知乎页面之后如下:

在刚刚的网页版抓包页面就可以看到数据包了

并且还包括 https 类型,比如查看其中一个数据包,找到数据是对应的,说明抓包成功。

4. 配合 Python 脚本

mitmproxy 代理(抓包)工具最强大之处在于对 python 脚本的支持(可以在 python 代码中直接处理数据包)

下面开始演示,先新建一个 py 文件(lyc.py)

from mitmproxy import ctx# 所有发出的请求数据包都会被这个方法所处理
# 所谓的处理,我们这里只是打印一下一些项;当然可以修改这些项的值直接给这些项赋值即可
def request(flow):# 获取请求对象request = flow.request# 实例化输出类info = ctx.log.info# 打印请求的urlinfo(request.url)# 打印请求方法info(request.method)# 打印host头info(request.host)# 打印请求端口info(str(request.port))# 打印所有请求头部info(str(request.headers))# 打印cookie头info(str(request.cookies))
# 所有服务器响应的数据包都会被这个方法处理
# 所谓的处理,我们这里只是打印一下一些项
def response(flow):# 获取响应对象response = flow.response# 实例化输出类info = ctx.log.info# 打印响应码info(str(response.status_code))# 打印所有头部info(str(response.headers))# 打印cookie头部info(str(response.cookies))# 打印响应报文内容info(str(response.text))

在终端中输入一下命令启动

mitmdump.exe -s lyc.py

(PS:这里需要通过另一个端启动浏览器)

"C:\Users\Administrator\AppData\Local\Google\Chrome\Application\chrome.exe" --proxy-server=127.0.0.1:8080 --ignore-certificate-errors

然后访问网页(http://www.chenlove.cn),这里就以我自己的个人网站为例

在终端中就可以看到信息


这些信息就是我们在 lyc.py 中指定的显示信息。

PS:在手机上配置好代理之后,mitmproxy 同样可以抓取手机端数据,这里的具体操作和我之前这篇文章一样【以某乎为实战案例,教你用 Python 爬取手机 App 数据】,只不过是抓包工具不一样而已。

5. 总结一下

  1. 不需要安装软件,直接在线(浏览器)进行抓包(包括手机端和 PC 端)

  2. 配合 Python 脚本抓包改包。

  3. 抓包过程的所有数据包都可以自动保留到 txt 里面,方便过滤分析

  4. 使用相对简单,易上手。

End

「进击的Coder」专属学习群已正式成立,搜索「CQCcqc4」添加崔庆才的个人微信或者扫描下方二维码拉您入群交流学习。

看完记得关注@进击的Coder

及时收看更多好文

↓↓↓

好文和朋友一起看~

这篇关于使用 MitmProxy 玩爬虫的,这篇文章别错过了!的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/991789

相关文章

Linux使用fdisk进行磁盘的相关操作

《Linux使用fdisk进行磁盘的相关操作》fdisk命令是Linux中用于管理磁盘分区的强大文本实用程序,这篇文章主要为大家详细介绍了如何使用fdisk进行磁盘的相关操作,需要的可以了解下... 目录简介基本语法示例用法列出所有分区查看指定磁盘的区分管理指定的磁盘进入交互式模式创建一个新的分区删除一个存

C#使用HttpClient进行Post请求出现超时问题的解决及优化

《C#使用HttpClient进行Post请求出现超时问题的解决及优化》最近我的控制台程序发现有时候总是出现请求超时等问题,通常好几分钟最多只有3-4个请求,在使用apipost发现并发10个5分钟也... 目录优化结论单例HttpClient连接池耗尽和并发并发异步最终优化后优化结论我直接上优化结论吧,

SpringBoot使用Apache Tika检测敏感信息

《SpringBoot使用ApacheTika检测敏感信息》ApacheTika是一个功能强大的内容分析工具,它能够从多种文件格式中提取文本、元数据以及其他结构化信息,下面我们来看看如何使用Ap... 目录Tika 主要特性1. 多格式支持2. 自动文件类型检测3. 文本和元数据提取4. 支持 OCR(光学

JAVA系统中Spring Boot应用程序的配置文件application.yml使用详解

《JAVA系统中SpringBoot应用程序的配置文件application.yml使用详解》:本文主要介绍JAVA系统中SpringBoot应用程序的配置文件application.yml的... 目录文件路径文件内容解释1. Server 配置2. Spring 配置3. Logging 配置4. Ma

Linux使用dd命令来复制和转换数据的操作方法

《Linux使用dd命令来复制和转换数据的操作方法》Linux中的dd命令是一个功能强大的数据复制和转换实用程序,它以较低级别运行,通常用于创建可启动的USB驱动器、克隆磁盘和生成随机数据等任务,本文... 目录简介功能和能力语法常用选项示例用法基础用法创建可启动www.chinasem.cn的 USB 驱动

C#使用yield关键字实现提升迭代性能与效率

《C#使用yield关键字实现提升迭代性能与效率》yield关键字在C#中简化了数据迭代的方式,实现了按需生成数据,自动维护迭代状态,本文主要来聊聊如何使用yield关键字实现提升迭代性能与效率,感兴... 目录前言传统迭代和yield迭代方式对比yield延迟加载按需获取数据yield break显式示迭

使用SQL语言查询多个Excel表格的操作方法

《使用SQL语言查询多个Excel表格的操作方法》本文介绍了如何使用SQL语言查询多个Excel表格,通过将所有Excel表格放入一个.xlsx文件中,并使用pandas和pandasql库进行读取和... 目录如何用SQL语言查询多个Excel表格如何使用sql查询excel内容1. 简介2. 实现思路3

java脚本使用不同版本jdk的说明介绍

《java脚本使用不同版本jdk的说明介绍》本文介绍了在Java中执行JavaScript脚本的几种方式,包括使用ScriptEngine、Nashorn和GraalVM,ScriptEngine适用... 目录Java脚本使用不同版本jdk的说明1.使用ScriptEngine执行javascript2.

c# checked和unchecked关键字的使用

《c#checked和unchecked关键字的使用》C#中的checked关键字用于启用整数运算的溢出检查,可以捕获并抛出System.OverflowException异常,而unchecked... 目录在 C# 中,checked 关键字用于启用整数运算的溢出检查。默认情况下,C# 的整数运算不会自

在MyBatis的XML映射文件中<trim>元素所有场景下的完整使用示例代码

《在MyBatis的XML映射文件中<trim>元素所有场景下的完整使用示例代码》在MyBatis的XML映射文件中,trim元素用于动态添加SQL语句的一部分,处理前缀、后缀及多余的逗号或连接符,示... 在MyBATis的XML映射文件中,<trim>元素用于动态地添加SQL语句的一部分,例如SET或W