https://github.com/examplecode/mproxy
这是一个微型的 http 代理服务器实现,使用 c 语言实现,核心代码量不足 500 行,不依赖任何第三方的库 (只能工作在 unixlike 系统下面).
其主要功能如下:
注:本代码实现简陋,完成仓促,目前还停留在一个原型的阶段,经测试访问 facebook,twitter,youtube ,google 是 OK 的,但不保证所有的网站兼容性的问题,希望能够起到一个抛砖引玉的作用。欢迎提交 pull request 继续完善. :)
通常情况下存在两种工作模式,普通代理模式和加密隧道模式.
这种工作模式和普通的 http 代理一样,mproxy 目前只做简单的 http 转发,不做任何页面的缓存。
这种工作模式需要以 client,server 的模式进行配合使用,即 mproxy 分别作为客户端和服务端,并在客户端及服务端形成一个简单的加密隧道,从而躲过 GFW 的侦测。
mproxy 可以运行在 unix-like 的操作系统下面,程序很小没有第三方的依赖,所以编译很简单,下面的一行命令搞定!
gcc -o mproxy mproxy.c
./mproxy -l 8000 -d
这种工作方式对我们来讲意义不大,只做功能展示,重点在下面。
注: "-d" 参数表示程序作为 deamon 服务,避免终端退出程序结束
有 fanqiang 需求的同学需要使用 mproxy 分别作为本地代理和远程代理,并且指定两个代理之间传输数据的方式为加密方式。 注:fanqiang 的话远程代理服务器需要部署在不受 GFW 管制的国外 (找个便宜的 VPS 即可).
你需要把 mproxy 源码在远程的服务器编译 (直接拷贝二进制应该也可以) 然后运行下面的命令。
./mproxy -l 8081 -D -d
-D 指定接受数据进行解密,其对应参数'-E'应用在本地代理
-d 指定启动作为后台服务,避免终端退出程序结束
在本地启动一个 mporxy 并指定目上一步在远程部署的服务器地址和端口号。
./mproxy -l 8080 -h xxx.xxx.xxx.xxx:8081 -E
-l 指定本地监听端口
-h 指定远端下一跳步的服务器地址及端口号,如果 fanqiang 需要是一台国外的服务器
-E 发送数据的时候进行加密,其对应参数'-D' 应用在远程代理