python代理charles_Mitmproxy + Python 做拦截代理

在测试过程中,我们经常用到Charles、Fiddler等抓包工具,通过抓取http请求进行相关的测试、问题排查。但是在一些特殊场景下,例如我们的数据传输是加密的,可能需要抓取到数据后再进行解密,这个使用抓包工具就不能完全符合我们的需求。

mitmproxy是什么

mitmproxy 就是用于 MITM 的 proxy,MITM 即中间人攻击(Man-in-the-middle attack)。用于中间人攻击的代理首先会向正常的代理一样转发请求,保障服务端与客户端的通信,其次,会适时的查、记录其截获的数据,或篡改数据,引发服务端或客户端特定的行为。

不同于 fiddler、Charles 或 wireshark 等抓包工具,mitmproxy 不仅可以截获请求帮助开发者查看、分析,更可以通过自定义脚本进行二次开发。举例来说,利用 fiddler 可以过滤出浏览器对某个特定 url 的请求,并查看、分析其数据,但实现不了高度定制化的需求,类似于:“截获对浏览器对该 url 的请求,将返回内容置空,并将真实的返回内容存到某个数据库,出现异常时发出邮件通知”。而对于 mitmproxy,这样的需求可以通过载入自定义 python 脚本轻松实现。

但 mitmproxy 并不会真的对无辜的人发起中间人攻击,由于 mitmproxy 工作在 HTTP 层,而当前 HTTPS 的普及让客户端拥有了检测并规避中间人攻击的能力,所以要让 mitmproxy 能够正常工作,必须要让客户端(APP 或浏览器)主动信任 mitmproxy 的 SSL 证书,或忽略证书异常。

mitmproxy简单理解就是个抓包工具,它可以提供命令行界面、web界面,还可以通过python脚本实现自定义的请求拦截、篡改等自定义的操作。

mitmproxy模块安装

pip3 install mitmproxy

完成后,系统将拥有 mitmproxy、mitmdump、mitmweb 三个命令,由于 mitmproxy 命令不支持在 windows 系统中运行(这没关系,不用担心),我们可以拿 mitmdump 测试一下安装是否成功,执行:

mitmdump --version

出现下面提示即安装成功

Mitmproxy: 5.1.1

Python: 3.6.1

OpenSSL: OpenSSL 1.1.1g 21 Apr 2020

Platform: Darwin-16.7.0-x86_64-i386-64bit

mitmproxy启动

要启动 mitmproxy 用 mitmproxy、mitmdump、mitmweb 这三个命令中的任意一个即可,这三个命令功能一致,且都可以加载自定义脚本,唯一的区别是交互界面的不同。

启动命令:

mitmdump -p 8889 -s run.py

-p 指定代理端口

-s 指定要执行的脚本文件

如果是启动web界面, 可以在127.0.0.1:8081上看到

mitmproxy脚本

在启动mitmproxy的时候可以指定脚本,脚本的使用规则如下:

import mitmproxy.http

from mitmproxy import ctx

class Counter():

def __init__(self):

self.num=0

def request(self, flow: mitmproxy.http.HTTPFlow):

self.num+=1

if "api.pre.sanjieke.cn" in flow.request.url:

ctx.log.info("we have seen %d flow " % self.num)

def response(self, flow: mitmproxy.http.HTTPFlow):

if "api.pre.sanjieke.cn" in flow.request.url:

import json

data = json.loads(str(flow.response.content, encoding='utf-8'))

ctx.log.info("data = {}".format(data))

addons = [

Counter()

]

1. 定义一个规则类,可以通过设置http生命周期方法来自定义相关代理设置,例如counter类中的request和response,即在http请求中的请求和返回

2.将类加入到addons数组中,启动mitmproxy时带上该py文件即可

当然除了request和response还有其它的阶段,这两个是常用的。

mitmproxy除了可以定义处理http请求生命周期各个阶段,还可以处理tcp链接生命周期、websocket生命周期等

基本常用的就是request、response这两个。

脚本中可以通过ctx进行相关日志打印。

以上就是mitmproxy的简单使用。

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

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

相关文章

js 编程时注意事项

Tip1: 网页中用js动态加载的元素,这些元素的click等事件响应必须写在这个加载部分的代码后面,否则事件不能正常响应。转载于:https://www.cnblogs.com/liubingna/archive/2013/03/05/2945244.html

Java中Iterator(迭代器)的用法及其背后机制的探究

在Java中遍历List时会用到Java提供的Iterator,Iterator十分好用,原因是: 迭代器是一种设计模式,它是一个对象,它可以遍历并选择序列中的对象,而开发人员不需要了解该序列的底层结构。迭代器通常被称为“轻量…

在c语言中,字符串topt65的长度是,谭浩强c__程序设计第13章.ppt

谭浩强c__程序设计第13章第13章 输入输出流 13.1 C的输入和输出 13.2 标准输出流 13.3 标准输入流 13.4 文件操作与文件流 13.5 字符串流 13.1 C的输入和输出 13.1.1 输入输出的含义 以前所用到的输入和输出,都是以终端为对象的,即从键盘输入数据&#x…

世界大百科全书!耶鲁大学教授再出神作!用1000幅图片,讲明白45亿年历史......

▲点击查看哈佛大学本杰明教授曾说:“越是到了高等教育的阶段,人们就越重视从历史中总结经验,尤其是精英阶段。很多人都想好好读读历史,但是一直以来,读历史都有一个问题:看着满满都是字的大部头&#xff0…

Hostonly cookie是什么鬼?

点击上方蓝字关注我们吧知道cookie hostonly属性的请举手🧐01Cookie常见姿势、疑难梳理目前w3c定义浏览器存放每个cookie需要包含以下字段:cookie属性基本描述举例备注namevaluecookie键值对ida3fWaexpirescookie过期时间expiresTue, 10-Jul-2013 08:30:…

Android之文件读写

一、基本概念 在Android应用中保存文件,保存的位置有两处 ①手机自带的存储空间,较小(如200M),适合保存一些小文件,Android中保存位置在data/data/应用包名/files目录 ②外存储设备如SD卡,较大,适合保存大文件如视频,Android中保存位置在mnt/sdcard目录,保存在sdcar…

系统即将关机请保存关机是由nt_设置Windows电脑自动关机

为了减少长时间沉迷电脑而忘记时间,设置Windows电脑自动关机是必要的事。 在我的电脑里,每到晚上10点都会自动关机。当然不会立刻关机,而是设置了1分钟的预留时间给自己保存一些文档资料。 Windows内建的Shutdown指令让人很方便的对这些进行操…

华为网络设备上的常用安全技术(一)

安全技术1:ACL 说明:ACL (Access Control List,访问控制列表)主要用来实现流识别功能。网络设备为过滤数据包,需要配置一系列的匹配规则,以识别需要过滤的报文。在识别出特定的报文之后&#xf…

【F12一下,看看页面里的第一行】——说说浏览器兼容性模式

面试官:请你谈谈标准(Standards)模式、怪异(Quirks)模式、准标准(Almost Standards)模式,当你打开IE9时候会看见,浏览器模式,文档模式,兼容性视图,这些又是什么? 尼玛啊......这些都是什么鸟东西…

java学习第七天

2019独角兽企业重金招聘Python工程师标准>>> 内部类 在类的内部也可以定义另一个类 ------------------------------------------------------------//类嵌套类,类中带有类//内部类跟方法一样,可以使用全部的访问权限修饰符,用法是一样的 接口 Int…

大一计算机课实训总结1000字,大一计算机实训报告.doc

文档介绍:大一计算机实训报告.doc大一计算机实训报告总结及相关经验当迈入中南大学的第一刻时,我知道我的新的生活开始了。而不知不觉第一学期即将在漫漫寒冬中结束,计算机课上有很多感受,是应该对自己所学有个总结的时候了。计算机应用是实践性很强的课程,它要求我…

并不是每个女生都能穿出这种效果......

1 阿姨,我需要一个你▼2 像极了是悬空的...▼3 放弃吧,整点阳间的...▼4 一个人如何自拍?(Twitter:Kskb_Tsuki)▼5 哥哥表示睡着了就把她饼干吃了...(via.dy俩小小赵)▼6 敲法器…

手把手教你学Dapr - 1. .Net开发者的大时代

Dapr全称Distributed Application Runtime,分布式应用运行时Dapr的口号简化云原生应用开发,聚焦在应用的核心逻辑,让代码简单、可移植Dapr的目标最佳实践的构建块任何语言或框架一致性,可移植,开放的API采纳标准可扩展…

Andorid之网络通信框架Volley使用和总结

Volley Volley 是 Google 推出的 Android 异步网络请求框架和图片加载框架。在 Google I/O 2013 大会上发布。 从名字由来和配图中无数急促的火箭可以看出 Volley 的特点:特别适合数据量小,通信频繁的网络操作

如何进行服务器选购[转]

各大服务器厂商为了更突出产品热点:开始在服务、方案方面进行花样翻新、包装,但万变不离其中,不管厂商们怎么样包装,只要我们抓住重点分析,希望下面的文章能够为您提供一些参考与帮助:详情点击:…

闲鱼有微信小程序吗_微信小程序商品展示页面(仿咸鱼)

项目中做了一个商品发布展示的页面,记录下来解决问题:想在setData中更改数组具体下标中的某个值let one "lowMoney[" 0 "].money";this.setData({[one]: (product.currentPrice * 0.1).toFixed(2), //1折})快去发布商品吧~~~已下…

objective-c中的static

在方法之外定义的变量不仅是全局变量,还是外部变量.但是很多场合,我们只需要定义为全局变量,并不是外部变量.也就是说希望定义的全局变量只在特定文件中是全局的,这个变量也只有在特定的类中的方法能访问,再也没有其他方法需要访问这个变量了. 这就引出了static. 被static修饰过…

电子计算机制作探测,如何自己制作一个简易的金属探测器

这是一个金属探测电路,它可以隔着地毯探测出地毯下的硬币或金属片。这个小装置很适合动手自制。一、元器件的准备电路中的NPN型三极管型号为9014,三极管VT1的放大倍数不要太大,这样可以提高电路的灵敏度。VD1-VD2为1N4148。电阻均为1/8W。金属…

“对不起,我们只招父母毕业于名牌院校的孩子”:最可怕的,是你还以为学历不重要...

全世界只有3.14 % 的人关注了爆炸吧知识1 近日,有一条新闻引发网友热议。成都某小学入学面试,要求家长除了带照片和身份证件之外,还要带“父母学历证书原件及复印件”。网上有种说法,该小学筛选的标准是父母毕业于211院校。后来眼…

.NET 6 对 StackOverflow 的优化

.NET 6 对 StackOverflow 的优化Intro去年写了一系列的傻逼代码, 其中有一篇 写了多年代码,你会 StackOverflow 吗,昨天一不小心又写了一个 StackOverflow 代码。。然后想把新的代码加到原来 StackOverflow 的示例中,把原来的示例项目改成了 …