python mitmproxy代理抓包工具
0 背景
mitmproxy
是一个开源的中间人代理工具,用于拦截、检查、修改和重放 HTTP 和 HTTPS 通信。它主要用于网络调试、安全测试、和爬虫的目的。
mitmproxy
提供了几种运行模式,包括命令行代理(mitmproxy
)、交互式控制台界面(mitmweb
)和图形界面(mitmweb
)。
在爬虫中,mitmproxy
可以作为一个强大的工具来辅助开发和调试。它可以帮助我们理解和模拟客户端(如浏览器或移动应用)与服务器之间的交互,特别是在处理复杂的动态网站或应用程序接口(API)时。
下面是一些 mitmproxy
在爬虫开发中的几种应用:
-
抓取和分析 HTTP/HTTPS 请求: mitmproxy
可以捕获和显示网站或API发送的所有请求和响应。这对于理解网站的数据加载机制(如通过 AJAX 加载的内容)和API的工作原理非常有用。 -
分析和绕过防爬机制:一些网站采用了复杂的防爬策略,如动态生成的请求参数或令牌。通过使用 mitmproxy
,我们可以分析这些机制并找到绕过它们的方法。 -
模拟客户端请求:了解客户端如何与服务器交互后,我们可以通过写python脚本,使用 mitmproxy
修改请求参数,模拟不同的客户端行为。
1 使用
1 安装和配置
mitmproxy
是一个第三包, 所以通过pip来安装
pip install mitmproxy
安装好后, 我们启动在命令中启动mitmproxy
就可以进行抓包了, 但是由于很多时候我们还需要抓https的包,因为由于证书的原因。
因此,我们还需要安装证书,笔者这里使用的是火狐浏览器,因为火狐的浏览器设置里面可以直接设置代理。
启动mitmproxy
后,我们手动配置代理为mitmproxy
的ip和端口,默认端口是8080。
然后访问在火狐中访问http://mitm.it
进行证书的安装,可以下载相关火狐的证书,也可以导入到系统的根证书里面去。
2 拦截 & 修改代理
我们直接编写python脚本,来达到请求和响应修改的效果。
mitimproxy的python脚本中支持函数和类两种方式,由于类相对更具有一些优势,所以我准备直接使用类进行操作。
from mitmproxy import http
class Proxy1(object):
def __init__(self):
self.records = []
def request(self, flow: http.HTTPFlow) -> None:
# 监听所有的请求
print(f'{flow.request.pretty_url=}')
# 当请求链接有一些特征出现时, 我们可以对请求进行一些操作, 比如修改它的请求链接, 请求体, 或者做个计数器什么的
if 'orange.com/simple' in flow.request.pretty_url:
flow.request.url = 'https://cp.orange.cc'
self.records += 1
def response(self, flow: http.HTTPFlow) -> None:
if '粘贴' in (text := flow.response.text):
text = text.replace('粘贴', '哈哈哈哈哈橘子')
flow.response.text = text
addons = [
Proxy1()
]
其中,
我们需要定义一个类,在类的内部实现request
和response
方法,
http.HTTPFlow
在 mitmproxy
中是一个非常核心的类,它代表了一个完整的 HTTP 流量流。HTTPFlow
对象提供了对流经代理的 HTTP 流量进行分析和修改的能力。我们可以通过编写处理这些 HTTPFlow
对象的脚本来定制 mitmproxy
的行为,实现对流量的监控、修改或重定向等功能。
然后在addons
中加入我们类的实例。
在上面的例子中,我们修改了请求的url,以及修改响应中的源代码,比如在混淆的js脚本还原是非常有用的,这让我们可以替换脚本。
最后,我们可以通过运行命令:
mitmproxy -s my_script.py
如果需要修改端口,默认是8080:
mitmproxy -s my_script.py -p 10086
2 关于
欢迎关注我的微信公众号
原文始发于微信公众号(其之):python mitmproxy代理抓包工具
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/204849.html