使用Python拦截安卓模拟器网络请求:记录特定URL的请求参数与响应
一、引言
1.1 声明
声明:
本文章仅供学习交流使用,不提供完整代码,严禁用于商业用途和非法用途,否则由此产生的一切后果均与本人无关,请各位自觉遵守相关法律法规。
本文章未经许可禁止转载,禁止任何二次修改(加工)后的传播;若有侵权,联系删除。
交流、合作请留言,24小时内回复!
1.2 简介
在开发和测试移动应用时,监控和分析网络请求是非常重要的一环。本文将介绍如何使用Python拦截安卓模拟器上APP发送的数据包,并记录特定URL请求的请求参数和响应。我们将使用
mitmproxy
作为代理工具,并通过Python脚本实现拦截和记录功能。
二、原理介绍
2.1 代理服务器
代理服务器是位于客户端和服务器之间的中间服务器,它可以拦截、修改或记录客户端和服务器之间的通信。通过将安卓模拟器的网络流量导向代理服务器,我们可以捕获并分析APP发送的网络请求。
2.2 mitmproxy
mitmproxy
是一个开源的中间人代理工具,支持HTTP和HTTPS流量的拦截和修改。它提供了一个Python API,允许我们编写自定义脚本来处理网络请求和响应。
2.3 安卓模拟器配置
安卓模拟器可以通过设置代理将网络流量导向指定的代理服务器。我们将使用mitmproxy
作为代理服务器,并在安卓模拟器中配置代理。
三、环境准备
3.1 安装mitmproxy
# 打开终端直接安装
pip install mitmproxy
3.2 配置安卓模拟器代理
本文以夜神模拟器 Android7(64bit)为例
- 打开安卓模拟器,进入 设置 -> 网络和互联网 -> Wi-Fi。
- 长按当前连接的Wi-Fi网络,选择 “修改网络”。
- 在代理设置中选择 “手动”,并输入以下信息:
- 代理主机名:
192.168.0.105
(通过ipconfig命令查看本机ip) - 代理端口:
8080
(mitmproxy默认端口)
- 代理主机名:
- 保存设置。
3.3 安装mitmproxy证书
为了拦截HTTPS流量,需要在安卓模拟器中安装mitmproxy的CA证书。
-
在PC上启动mitmproxy:
以下两个命令都可以,建议使用 mitmdump 代替 mitmproxy 可以避免进入交互模式。- mitmdump 命令
- mitmproxy 命令
-
在安卓模拟器中打开浏览器,访问http://mitm.it 。下载并安装适用于安卓的CA证书。
四、编写python脚本
编写一个Python脚本,使用mitmproxy的API来拦截特定URL的请求,并记录请求参数和响应。
4.1 创建脚本文件
创建一个名为intercept_traffic.py的文件,并添加以下内容
# 示例脚本 按需修改 不可直接运行
from mitmproxy import http
# 定义要拦截的URL
TARGET_URL = "https://example.com/api"
def request(flow: http.HTTPFlow) -> None:
# 检查请求的URL是否匹配目标URL
if flow.request.pretty_url.startswith(TARGET_URL):
print(f"Intercepted request to: {flow.request.pretty_url}")
print(f"Request headers: {flow.request.headers}")
print(f"Request content: {flow.request.text}")
def response(flow: http.HTTPFlow) -> None:
# 检查响应的URL是否匹配目标URL
if flow.request.pretty_url.startswith(TARGET_URL):
print(f"Intercepted response from: {flow.request.pretty_url}")
print(f"Response status code: {flow.response.status_code}")
print(f"Response headers: {flow.response.headers}")
print(f"Response content: {flow.response.text}")
4.2 运行脚本
mitmdump -s intercept_traffic.py --set termlog_verbosity=error
4.3 测试与验证
- 在安卓模拟器中启动目标APP,并触发目标URL的请求。
- 在PC上观察mitmproxy的输出,确认请求和响应被正确拦截和记录。