fiddler的App抓包及服务端模拟

本文详细介绍了如何使用Fiddler进行移动App的HTTP接口抓包,以及如何利用Fiddler的AutoResponder功能模拟服务端响应。在没有接口文档的情况下,Fiddler可以帮助开发者获取后台接口信息;而在没有实际后台服务时,它能模拟服务端,方便测试和调试。操作步骤包括设置Fiddler允许远程连接,配置手机代理,以及设置AutoResponder规则来实现消息的模拟响应。

本文介绍在http下的fiddler抓包
主要2个部分:
1)在没有接口文档的情况,使用Fiddler抓包,获得HTTP后台接口;
2)在没有HTTP后台服务的情况下,使用Fiddler模拟服务端。

第一部分:在手机移动端App下的抓包
前提条件:确保手机和PC在同一局域网下,连接同一个Wi-Fi网络
1)找到PC的IP地址,如下图,运行ipconfig,得到192.168.0.103:
IP地址 是后面的IPv4的地址
2)在Fiddler工具上点击:Tools->Telerik Fiddler Options->connections,在如下的Allow remote computers to connect 的勾打上,记住Fiddler的监听端口8888,稍后会使用上
在这里插入图片描述
3)打开手机,长按已连接的wifi网络,点击修改网络
4)在代理上面选择手动,IP填写上面获取的192.168.0.103,端口填写Fiddler的监听端口8888,之后点击保存。
5)打开手机上的任意一个移动app,在fiddler上可以看到消息体。
如下图:
在这里插入图片描述

可以很清晰的看到通过post接口发送的消息包括headers以及body等,以及响应消息体。

第二部分 使用Fiddler模拟服务端
通过Fldder的AutoResponder可以做到模拟服务端。
1)首先,我们介绍最简单的服务模拟方式,即我们有真实响应的情况下,如何模拟服务端。
选中我们需要模拟的消息,也就是第11条:

在这里插入图片描述
2)保存该消息的响应消息体到本地
在这里插入图片描述
3)点击模拟功能的入口AutoResponder,选中Enable rules,以及Unmatched requests passthrough:

在这里插入图片描述
4)点击添加一条规则,在最下面的响应消息下拉框中,选中find a file,指向我们上面保存的文件
在这里插入图片描述
5)这样,一条消息的服务端模拟就完成了。
在这里插入图片描述
之后我们可以用postman再做一遍检查。看看返回结果,doublecheck

上面使用了精确匹配EXACT,是较为简单的应用。实际上,很多时候,服务端响应的消息体是需要我们自己去构造的,并且上面的消息匹配方式是精确匹配,应用面偏窄了些,这些再普及一下自动匹配的一些知识:
关于自动匹配,可以使用的有:
前缀为“EXACT:”表示完全匹配(大小写敏感)
无前缀表示基本搜索,表示搜索到字符串就匹配
前缀为“REGEX:”表示使用正则表达式匹配
前缀为“REGEX:(?insx)”表示匹配方式其中:

  • i表示不区分大小写;
  • n表示指定的唯一有效的捕获是显式命名或编号的形式;
  • s表示单行模式;
  • x表示空格说明的;
<think>我们正在讨论的是如何确定Node服务的端口号以及如何使用Fiddler抓包。在之前的对话中,我们已经了解到Electron主进程中的Node服务通常是动态分配端口的,并且给出了几种确定端口号的方法。同时,我们还介绍了如何配置代理以使用Fiddler抓包。 但是,这里有一个关键点:在问题中,我们是在向一个设备发送HTTP请求(例如,设备的IP地址),而不是在Node中启动一个HTTP服务。因此,我们实际上不需要知道Node服务的端口号(因为Node服务作为客户端去连接设备,设备才是服务端)。我们需要抓取的是从Node进程(客户端)发送到设备(服务端)的请求。 因此,我们需要确保Node进程(作为HTTP客户端)发出的请求经过Fiddler代理。Fiddler默认监听在127.0.0.1:8888。 以下是具体步骤: ### 一、确定Node是否使用代理 Node.js默认不会使用系统代理设置,因此我们需要在代码中配置代理,或者通过环境变量设置。 ### 二、配置Node使用Fiddler代理 #### 方法1:通过环境变量(推荐) 在启动Electron应用之前,设置环境变量: ```bash # 在Windows上 set http_proxy=http://127.0.0.1:8888 set https_proxy=http://127.0.0.1:8888 # 在macOS/Linux上 export http_proxy=http://127.0.0.1:8888 export https_proxy=http://127.0.0.1:8888 ``` 然后启动Electron应用。 #### 方法2:在Axios中配置代理 如果你使用的是axios,可以在创建axios实例时配置代理: ```javascript const axios = require('axios'); const HttpsProxyAgent = require('https-proxy-agent'); const HttpProxyAgent = require('http-proxy-agent'); // 创建代理agent const httpAgent = new HttpProxyAgent('http://127.0.0.1:8888'); const httpsAgent = new HttpsProxyAgent('http://127.0.0.1:8888'); this.axiosInstance = axios.create({ baseURL: `http://${this.ip}`, httpAgent: httpAgent, httpsAgent: httpsAgent, proxy: false // 禁用axios的默认代理配置,因为我们使用了agent }); ``` 注意:如果设备使用的是HTTPS,那么必须使用`HttpsProxyAgent`。同时,确保安装了`https-proxy-agent`和`http-proxy-agent`(或使用`proxy-agent`包): ```bash npm install https-proxy-agent http-proxy-agent ``` ### 三、Fiddler配置 1. 打开Fiddler,确保监听端口为8888(默认)。 2. 为了让Fiddler可以捕获HTTPS流量,需要启用HTTPS解密(Tools > Options > HTTPS > Decrypt HTTPS traffic)。 3. 信任Fiddler的根证书(在第一次启用HTTPS解密时,Fiddler会提示安装证书)。 4. 为了只捕获目标设备的请求,可以在Fiddler的Filters中设置,比如只显示包含设备IP的请求。 ### 四、捕获请求 配置完成后,运行Electron应用并执行登录操作。在Fiddler中,你应该能够看到从Node进程发出的到设备IP的HTTP请求。 ### 五、常见问题 1. **证书问题**:如果设备使用HTTPS,并且使用了自签名证书,那么加上代理后可能会出现证书错误。可以在axios配置中忽略证书验证(仅用于调试): ```javascript this.axiosInstance = axios.create({ baseURL: `http://${this.ip}`, httpAgent: httpAgent, httpsAgent: httpsAgent, proxy: false, rejectUnauthorized: false // 忽略证书错误 }); ``` 2. **捕获不到请求**: - 确保Fiddler正在运行。 - 确保环境变量设置正确(如果使用方法1)。 - 检查代理配置是否正确。 - 检查是否有防火墙阻止。 ### 完整代码示例 ```javascript const axios = require('axios'); const { HttpsProxyAgent } = require('https-proxy-agent'); const { HttpProxyAgent } = require('http-proxy-agent'); class DeviceLogin { constructor(ip) { this.ip = ip; this.stok = null; // 配置代理Agent const proxyUrl = 'http://127.0.0.1:8888'; const httpAgent = new HttpProxyAgent(proxyUrl); const httpsAgent = new HttpsProxyAgent(proxyUrl); this.axiosInstance = axios.create({ baseURL: `http://${ip}`, // 注意:如果设备是HTTPS,这里应改为https httpAgent: httpAgent, httpsAgent: httpsAgent, proxy: false, rejectUnauthorized: false // 仅调试时使用 }); } // ... 其他方法,如login ... } ``` ### 注意事项 - 如果设备使用的是HTTPS,那么基础URL应该是`https://${ip}`,并且使用`httpsAgent`。 - 忽略证书验证(`rejectUnauthorized: false`)仅在调试时使用,生产环境应移除。 §§相关问题§§: 1. 如何让Node.js遵循系统代理设置? 2. 在Electron中,渲染进程和主进程的网络请求捕获有何不同? 3. 除了Fiddler,还有哪些工具可以捕获HTTP/HTTPS请求?它们各有什么特点? 4. 如何在Node.js中动态切换代理设置? </think>### 如何确定 Node 服务的端口号并使用 Fiddler 抓包 #### 一、确定 Node 服务端口号的方法(针对 HTTP 服务) 如果您的 Node 进程创建了 HTTP 服务(如 Express/Koa 服务),可以这样查找端口: ```javascript // 在创建服务的代码处添加日志 const server = app.listen(0, () => { const port = server.address().port; console.log(`Server running on port: ${port}`); }); ``` #### 二、针对 HTTP 客户端请求的抓包方案(您的场景) 您需要抓取的是 Node 作为**客户端**向设备发送的 HTTP 请求,而非服务端口。解决方案如下: ##### 1. 配置 Axios 使用 Fiddler 代理 ```javascript const axios = require('axios'); const { HttpsProxyAgent } = require('https-proxy-agent'); class DeviceLogin { constructor(ip) { this.ip = ip; // 关键:创建带 Fiddler 代理的 Axios 实例 const proxyAgent = new HttpsProxyAgent('http://127.0.0.1:8888'); this.axiosInstance = axios.create({ baseURL: `http://${ip}`, httpsAgent: proxyAgent, proxy: false, rejectUnauthorized: false // 忽略证书错误 }); } async login(username, rawPassword) { // ...您的登录逻辑... } } ``` ##### 2. 环境变量配置(无需修改代码) 在启动 Electron 前设置代理: ```bash # Windows set HTTP_PROXY=http://127.0.0.1:8888 set HTTPS_PROXY=http://127.0.0.1:8888 electron . # macOS/Linux export HTTP_PROXY=http://127.0.0.1:8888 export HTTPS_PROXY=http://127.0.0.1:8888 electron . ``` #### 三、Fiddler 设置步骤 1. **启用 HTTPS 解密**: - Tools > Options > HTTPS - 勾选 "Decrypt HTTPS traffic" - 点击 "Actions" > "Trust Root Certificate" 2. **过滤设备请求**: ```text Filters > Hosts > "No Zone Filter" > "Hide the following Hosts" 输入框留空 > "Show only the following Hosts" 填写您的设备 IP(如 192.168.1.100) ``` 3. **捕获请求流程**: - 启动 Fiddler(管理员权限) - 用代理配置启动 Electron 应用 - 执行登录操作 - 在 Fiddler 左侧列表查找 POST 请求: ``` POST http://设备IP/... ``` #### 四、验证捕获结果 在 Fiddler 中选中请求后: 1. **Inspectors > WebForms**:查看 JSON 请求体 2. **Raw**:检查原始请求头和正文 3. **JSON**:检查格式化后的 JSON #### 五、常见问题解决 1. **抓不到请求**: ```javascript // 添加网络请求日志 this.axiosInstance.interceptors.request.use(request => { console.log('请求URL:', request.url); return request; }); ``` 2. **TLS 握手失败**: ```javascript // 在代理配置后添加 process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0'; ``` 3. **乱码问题**: 在 Fiddler 中右击请求 > Remove > Encoding --- ### 完整调试配置示例 ```javascript const axios = require('axios'); const { HttpsProxyAgent } = require('https-proxy-agent'); class DeviceLogin { constructor(ip) { this.ip = ip; // 1. 强制 Node.js 信任 Fiddler 证书 process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0'; // 2. 创建带代理的 Axios 实例 this.axiosInstance = axios.create({ baseURL: `http://${ip}`, httpsAgent: new HttpsProxyAgent('http://127.0.0.1:8888'), proxy: false }); // 3. 添加请求日志(可选) this.axiosInstance.interceptors.request.use(request => { console.log('[DEBUG] 请求发送至:', request.url); return request; }); } // ...您的登录方法... } ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值