reqable-app icon indicating copy to clipboard operation
reqable-app copied to clipboard

[feature] 支持透明代理 (Transparent proxy support)

Open hiuxia opened this issue 2 years ago • 10 comments

原因

  • 单纯使用系统代理无法抓取一些应用的包,而使用透明代理(可以理解为 clash 或 surge的增强模式)可以有效的抓取。经过本人电脑上 surge 的测试,reqable 不能抓取的包 surge 可以有效的进行抓取(开启 http capture 和 https decrypt)

  • 但是 surge 的抓包功能较为简陋,不能做到和 reqable 等网络调试工具一样的体验。

Feature 请求说明

希望能够在 system proxy 之外添加增强模式代理(网络层代理)从而实现更好的抓包体验。

hiuxia avatar Dec 22 '23 05:12 hiuxia

@hiuxia 请问你测试的是Reqable的哪个版本?

MegatronKing avatar Dec 22 '23 06:12 MegatronKing

最新的 2.0 版本

hiuxia avatar Dec 22 '23 06:12 hiuxia

@hiuxia 我这clash和surge这些操作一知半解,由相关的一些文章可以给我参考下吗?

MegatronKing avatar Dec 22 '23 09:12 MegatronKing

感谢这么快的回复。我觉得可以参考 Surge 增强模式参考

hiuxia avatar Dec 22 '23 10:12 hiuxia

clash 的文档的存档:存档 其中的 premium 部分应该就是增强模式的详细说明(只找到了英文的文档)。

hiuxia avatar Dec 22 '23 10:12 hiuxia

@hiuxia 我看了下,机制好像是创建一个虚拟网卡,所有流量从虚拟网卡经过,类似VPN的模式。这种模式下,数据包需要从网络层开始处理。Reqable本身是实现了应用层(包括SSL)的透明代理的,通过一些第三方工具,解析出应用层的数据包直接发给reqable即可。如果是全部集成到Reqable里面,需要一些第三方库的支持,兼容性也不好说,有难度。

MegatronKing avatar Dec 26 '23 06:12 MegatronKing

您能推荐下相关的网络应用层解析工具吗?

获取 Outlook for iOShttps://aka.ms/o0ukef


发件人: Megatron King @.> 发送时间: Tuesday, December 26, 2023 2:20:08 PM 收件人: reqable/reqable-app @.> 抄送: hiuxia @.>; Mention @.> 主题: Re: [reqable/reqable-app] [feature] 支持透明代理 (Transparent proxy support) (Issue #337)

@hiuxiahttps://github.com/hiuxia 我看了下,机制好像是创建一个虚拟网卡,所有流量从虚拟网卡经过,类似VPN的模式。这种模式下,数据包需要从网络层开始处理。Reqable本身是实现了应用层(包括SSL)的透明代理的,通过一些第三方工具,解析出应用层的数据包直接发给reqable即可。如果是全部集成到Reqable里面,需要一些第三方库的支持,兼容性也不好说,有难度。

― Reply to this email directly, view it on GitHubhttps://github.com/reqable/reqable-app/issues/337#issuecomment-1869290960, or unsubscribehttps://github.com/notifications/unsubscribe-auth/AXLYB7VEBIXR4AA6PHEBNS3YLJUBRAVCNFSM6AAAAABA7MBREGVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMYTQNRZGI4TAOJWGA. You are receiving this because you were mentioned.Message ID: @.***>

hiuxia avatar Dec 26 '23 07:12 hiuxia

@hiuxia 我看了下,机制好像是创建一个虚拟网卡,所有流量从虚拟网卡经过,类似VPN的模式。这种模式下,数据包需要从网络层开始处理。Reqable本身是实现了应用层(包括SSL)的透明代理的,通过一些第三方工具,解析出应用层的数据包直接发给reqable即可。如果是全部集成到Reqable里面,需要一些第三方库的支持,兼容性也不好说,有难度。

除了虚拟网卡方案,也有用eBPF实现的,参见这里 不过eBPF目前似乎只有linux比较成熟,其他平台不好说。windows似乎也有,可用程度不清楚

Curious-r avatar Jan 09 '24 12:01 Curious-r

目前Windows有一个工具叫做HTTPDebuggerPro,可以实现全局的应用层抓包

cesaryuan avatar Apr 22 '24 15:04 cesaryuan

Windows 上没有 iptables,我调查了目前大部分抓包类软件和科学类应用的透明代理实现方式,按照技术栈分类如下,总体来说推荐基于 Windows Filtering Platform (WFP) 的方案

基于 Windows Filtering Platform (WFP) 的方案

这种方案利用了 Windows 提供的 WFP API,需要进行驱动级别的编程,然而有一些项目提供了封装好的易于使用的 API,比较著名的有 Netfilter SDKWinDivert

比如:

基于虚拟网卡接口的方案

这类方案的原理一般为先创建一个虚拟网卡,然后修改路由表将所有流量转发到代理,据说在性能上不如基于WFP的方案。Windows上主流开源方案有以下两个:

具体来说,有以下几个项目:

基于进程注入 Inline Hook 的方案

这类方案通过 hook connect 函数来实现流量的重定向。基于该方案的项目貌似比较少,已知 Proxifier 在 4.0 之间采取该方式实现全局流量捕获。


参考文章

cesaryuan avatar Jun 25 '24 15:06 cesaryuan