拦截API

上面说了,使用SOCK_RAW 截获报文受挫,因此考虑直接拦截通过send、recv 处理的数据。

总的说来,有3 种方法:

1,动态修改send、recv 开始的代码,跳转到自己写的处理函数中;

2,使用DetoursAPI;

3,修改IATEntry;

因为开始参考了 

http://wenku.baidu.com/view/7f4928a30029bd64783e2c99.html

这篇文章,就使用第1 种方法了。

写完代码,编译运行,出现内存访问错误。

考虑到多线程问题,添加线程同步保护。

依然有错,调试发现从替代函数返回后出错,应该是调用方式的问题。

查SDK 头文件,这两个函数调用方式竟然是 WSAAPI,也就是PASCAL,晕菜。

于是替换函数与其改为一致。

运行,貌似能多运行一会,但还是会出错。

查看日志文件,发现其中的记录也不太正常。

在调用完send 或recv 后的一句输出是乱码。

还是栈被破坏了!

想一想。。。

想到了,矮油,用来调用原函数的函数指针类型定义没改。

于是也加上WSAAPI,重新生成运行,一切OK。


### 如何拦截 API 请求或响应的技术实现方案 #### 使用 Electron.js 进行请求拦截 Electron 提供了一个 `webRequest` 模块,允许开发者拦截并修改网络请求和响应。该模块支持多种事件监听器,例如 `onBeforeRequest` 和 `onResponseStarted`,可用于捕获和处理 HTTP 请求与响应[^1]。 以下是一个简单的代码示例,展示如何使用 Electron 的 `webRequest` 来拦截请求: ```javascript const { session } = require('electron'); session.defaultSession.webRequest.onBeforeSendHeaders((details, callback) => { console.log('Intercepted request:', details.url); // 修改请求头或其他属性 const modifiedDetails = Object.assign({}, details, { requestHeaders: Object.assign({}, details.requestHeaders, { 'Custom-Header': 'HeaderValue' }) }); callback({ cancel: false, requestHeaders: modifiedDetails.requestHeaders }); }); session.defaultSession.webRequest.onCompleted((details) => { console.log('Request completed:', details.url); }); ``` #### 使用 FastAPI 实现请求拦截 FastAPI 支持中间件功能,可以通过自定义中间件来拦截和处理传入的请求以及传出的响应。这种机制非常适合对请求数据进行加密/解密操作或者记录日志等用途[^2]。 下面是一段利用 FastAPI 中间件拦截请求的例子: ```python from fastapi import FastAPI, Request from starlette.middleware.base import BaseHTTPMiddleware app = FastAPI() class CustomMiddleware(BaseHTTPMiddleware): async def dispatch(self, request: Request, call_next): # 处理请求前逻辑 print(f"Received request to {request.url}") response = await call_next(request) # 处理响应后逻辑 print(f"Sending response from {request.url}") return response app.add_middleware(CustomMiddleware) ``` #### 基于 Chrome 扩展的方式 对于前端环境下的请求拦截,Chrome 浏览器提供了强大的扩展开发接口——`chrome.webRequest`。它能够帮助开发者监控所有的网页流量,并执行特定的操作比如阻止某些类型的资源加载或是分析通信内容[^3]。 这里给出一段基本的 JavaScript 脚本片段,演示怎样借助此 API 监听所有发出的 HTTP(S) 请求及其完成情况: ```javascript // 添加监听器以获取发送头部信息 chrome.webRequest.onBeforeSendHeaders.addListener( function (details) { console.log("Request Headers:", details.requestHeaders); }, { urls: ["<all_urls>"] }, ['requestHeaders'] ); // 当请求完成后触发回调函数 chrome.webRequest.onCompleted.addListener( function (details) { console.log("Request Completed with URL:", details.url); }, { urls: ["<all_urls>"] } ); ``` 以上三种方法分别适用于不同的应用场景和技术栈,在实际项目中可以根据具体需求选择合适的解决方案。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值