专栏名称: AirPython
分享 Python 自动化及爬虫、数据分析实战干货,欢迎关注。
目录
相关文章推荐
生态梦网  ·  警惕!生态城4小区居民被骗100余万元 ·  2 天前  
51好读  ›  专栏  ›  AirPython

实战 | 手把手教你如何使用抓包神器 MitmProxy

AirPython  · 公众号  ·  · 2021-04-26 12:03

正文


大家好,我是安果!


今天教大家如何使用 MitmProxy 这款抓包工具


玩爬虫的小伙伴都知道,抓包工具除了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 # 打印请求的url info(request.url) # 打印请求方法 info(request.method)






请到「今天看啥」查看全文