mitmproxy简介

mitmproxy(man-in-the-middle attack proxy),中间人攻击工具,可以用来拦截、修改、保存 HTTP/HTTPS 请求,对于爬虫尤其是基于APP的爬虫来说,是必不可少的一款神器。mitmproxy 基于Python开发,可以通过Python代码对请求和响应进行自定义过滤和修改。
对应其安装,可以到其官网(https://www.mitmproxy.org/)下载对应操作系统的安装文件,本文略去安装过程。

mitmproxy 默认监听本地的8080端口,本文以Windows平台为例,通过使用 mitmdump(命令行模式,主要使用python脚本做交互) 或者 mitmweb (对应图形界面)命令开启mitmproxy,例如执行 mitmweb 之后,会在浏览器自动打开http://127.0.0.1:8081/#/flows页面,在浏览器的新的选修卡中打开百度首页,在上面的页面可以看到 浏览器数据包,见下图。

mitmproxy抓包

mitmproxy代理软件的强大之处在于对 python 脚本的支持,本次的目标: 在PC端访问 抖音用户 分享链接 https://www.iesdouyin.com/share/user/88445518961页面时,会看到该用户发表的视频作品列表,如下图:

通过浏览器可以看到 加载 作品的异步请求为XHR,请求地址:
https://www.iesdouyin.com/web/api/v2/aweme/post/?user_id=88445518961&sec_uid=&count=21&max_cursor=0&aid=1128&_signature=WIBR-xAfBQlRzCvu3x3D4liAUe&dytk=7450aa3aef3feced81c810744bd2b79f,对应的请求参数有多个,其中 _signature 参数值是由前端 js 生成的加密值,每次请求均不同,感兴趣的朋友可以试着 破解下,如果你不想破解这个参数,请继续看本文下面的部分。

下面开始编写 python脚本抓取刚才上面那个包含加密参数的请求url地址,脚本内容保存在mitm_addons.py文件中。

import mitmproxy.http
from mitmproxy import ctx
import jsonfilter_host='www.iesdouyin.com' #目标主机
url_paths='/web/api/v2/aweme/post/?user_id=' # 网页 路径指纹class Counter:def __init__(self):self.num = 0def request(self, flow: mitmproxy.http.HTTPFlow):global filter_host,url_pathsif flow.request.host != filter_host or not flow.request.path.startswith(url_paths):returnself.num = self.num + 1ctx.log.info("We've seen %d flows" % self.num)class Joker:def request(self, flow: mitmproxy.http.HTTPFlow):passdef response(self, flow: mitmproxy.http.HTTPFlow):global filter_host,url_pathsif flow.request.host != filter_host or not flow.request.path.startswith(url_paths):returntext = flow.response.get_text()texts = self.deal_content(text)if not texts:print('null')returnfor a,b in texts:print(a)print(b)print('\n')def deal_content(self, a):b=json.loads(a)c=b.get('aweme_list')if not c:#c --> list of dictsreturn ''print('Found {} results.\n'.format(len(c)))rst=[]for i in c:j=i['statistics']info='播放次数:{} 评论数:{} 分享:{} 转发:{} 挖掘:{}'.format(j['play_count'],j['comment_count'],j['share_count'],j['forward_count'],j['digg_count'])#k=i['video']['download_addr']['url_list']#k=i['video']['play_addr_lowbr']['url_list']k=i['video']['play_addr']['url_list']ll='\n'.join(k)rst.append((info,ll))return rstaddons = [Counter(),Joker(),
]

对上面的代码简单解释下,过滤的目标主机是 www.iesdouyin.com,url中包含(这里是起始部分是)’/web/api/v2/aweme/post/?user_id=’,而其中的两个类,Counter用于对满足条件的数据包进行计数,Joker类用于过滤数据包,对应不满足条件的数据包直接转发,而满足条件的数据包,则对其做处理,代码中将结果打印在命令行中。

完整流程:
将上面代码保存好之后,通过命令行进入脚本文件所在目录,执行:

mitmdump -q -s mitm_addons.py

然后再通过新的命令行窗口,打开谷歌浏览器,忽略证书错误,同时对其设置了局部代理:

"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" --proxy-server=127.0.0.1:8080 --ignore-certificate-errors

在浏览器中打开网页:https://www.iesdouyin.com/share/user/88445518961

最终效果如下图:

其中的各个网址即为对应各个短视频的观看地址,可以在浏览器尝试打开,通过浏览器插件或者使用火狐浏览器 修改浏览器的 user-agent,可以正常观看或者下载视频。

上面的脚本结合selenium可以实现 对目标网站的批量抓取,感兴趣的朋友可以尝试下。

python结合mitmproxy抓包实践相关推荐

  1. mitmproxy抓包 | Python双篡改假请求实战(六)

    往期回顾: 抓包工具mitmproxy环境配置使用(一) 抓包工具mitmproxy | mitmweb基本用法(二) mitmproxy抓包 | Python实时生成接口自动化用例(三) mitmp ...

  2. mitmproxy抓包 | Python篡改请求参数实战(五)

    抓包工具mitmproxy环境配置使用(一) 抓包工具mitmproxy | mitmweb基本用法(二) mitmproxy抓包 | Python实时生成接口自动化用例(三) mitmproxy抓包 ...

  3. mitmproxy抓包 | Python疑难测试场景mock实战(四)

    往期经典文章回顾: 抓包工具mitmproxy环境配置使用(一) 抓包工具mitmproxy | mitmweb基本用法(二) mitmproxy抓包 | Python实时生成接口自动化用例 mitm ...

  4. mitmproxy抓包 | Python疑难测试场景mock

    往期经典文章回顾: 抓包工具mitmproxy环境配置使用(一) 抓包工具mitmproxy | mitmweb基本用法(二) mitmproxy抓包 | Python实时生成接口自动化用例 mitm ...

  5. mitmproxy抓包 | Python实时生成接口自动化用例(三)

    抓包工具mitmproxy环境配置使用(一) 抓包工具mitmproxy | mitmweb基本用法(二) 前面已经给大家分享了mitmproxy的环境配置和基本使用,文章浏览量很高,相信对抓包工具感 ...

  6. mitmproxy抓包 | Python实时生成接口自动化用例

    抓包工具mitmproxy环境配置使用(一) 抓包工具mitmproxy | mitmweb基本用法(二) 前面已经给大家分享了mitmproxy的环境配置和基本使用,文章浏览量很高,相信对抓包工具感 ...

  7. 全网都在看的Fiddler、mitmproxy抓包秘籍,花钱都买不到

    点击上方"蓝字",轻松关注我们 Fiddler.mitmproxy.Stream抓包工具原创集合 1.Fiddler抓取APP请求(环境搭建)之mama再也不用担心抓不到包了 2. ...

  8. mitmproxy 抓包神器-1.环境准备与抓取浏览器请求

    前言 常见的抓包工具有fiddler 和 charles, 这些工具都是需要安装本地客户端,python 版的抓包工具可以用 mitmproxy. mitmproxy 相比Charles.fiddle ...

  9. 安卓手机mitmproxy抓包

    抓包# Android 从 7.0 开始,系统不再信任用户 CA 证书(应用 targetSdkVersion >= 24 时生效,如果 targetSdkVersion <24 即使系统 ...

最新文章

  1. Linux文件操作四剑客常用命令
  2. HDU2016数据交换
  3. 【蓝桥杯省赛】冲刺练习题【动态规划】倒计时【08】天
  4. 需求分析 应该先写业务还是功能_产品经理必知:产品调研中功能调研的标准“姿势”...
  5. Java SE 8新特性导览:使用Lambda Expression进行函数式编程
  6. 格力电器Q3净利润73.37亿元 同比下降12.32%
  7. Flex 4中组件背景设置(填充方式)group为例子
  8. centos 6 安装 php 5.5 fpm支持
  9. 手机前端框架UI库(Frozen UI、WeUI、SUI Mobile)
  10. JAVA系统蓝屏_Tomcat启动系统蓝屏
  11. 2022-2028年中国全屋定制行业发展动态及投资前景分析报告
  12. kettle读取hbase数据
  13. 今天有个同事L发了一个“称象”的帖子,不过更搞笑的是另一个同事Z回了一个经典的解答。...
  14. 了解DNS劫持及dns劫持修复方法
  15. python中反斜线是什么意思_Python中正反斜杠(‘/’和‘’)的意义与用法
  16. 月份30或31c语言编程,C语言程序设计上机编程方法.PPT
  17. 黑马程序员----swift基础语法!
  18. 八位计算机最小二进制,八位二进制补码最小值
  19. 18 Issues in Current Deep Reinforcement Learning from ZhiHu
  20. Newtonsoft.Json序列化库

热门文章

  1. [转]人生就像一张茶几,摆满了各种杯具洗具餐具
  2. linux永久修改dns
  3. chrome弹出2345网址导航删除方法之一
  4. sql统计表个数以及表中字段个数
  5. java ee jpi是什么,“JPI”是“Java Plug In”的缩写,意思是“Java插件”
  6. 啊哈,381654729!
  7. 鞍部在哪里_观山指南!喜马拉雅9座8000米高峰在哪儿看?
  8. win10每回打开程序都弹出“是否允许更改设置”提示怎么办
  9. python鼠标监听_用Python监听鼠标和键盘事件
  10. 怎么做SEO——页面权重计算公式