Windows 实现透明代理或者全局代理的方案总结

Windows 实现透明代理或者全局代理的方案总结

题中所指的透明代理或全局代理的意思为:无需手动设置 Proxy 的、应用无感知的、可以实现代理所有应用流量的代理方式。

透明代理的用处

  • 全局抓包(中间人代理):有些应用不会读取 System Proxy 设置,因此只能通过透明代理来实现此类应用流量的捕获
  • 全局科学:懂的都懂

方案总结

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

基于 Windows Filtering Platform (WFP) 的方案

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

比如:

基于虚拟网卡接口的方案

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

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

基于进程注入 Inline Hook 的方案

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


参考文章