通用技术 【分享】最小的 http proxy c 语言实现 - 支持 fanqiang,从此 google 无压力

恒温 · 2014年06月27日 · 最后由 思寒_seveniruby 回复于 2014年06月29日 · 3114 次阅读
本帖已被设为精华帖!

https://github.com/examplecode/mproxy

mproxy 使用说明

这是一个微型的 http 代理服务器实现,使用 c 语言实现,核心代码量不足 500 行,不依赖任何第三方的库 (只能工作在 unixlike 系统下面).
其主要功能如下:

  • http 代理
  • 支持 https 隧道
  • 支持简单加密隧道

注:本代码实现简陋,完成仓促,目前还停留在一个原型的阶段,经测试访问 facebook,twitter,youtube ,google 是 OK 的,但不保证所有的网站兼容性的问题,希望能够起到一个抛砖引玉的作用。欢迎提交 pull request 继续完善. :)

通常情况下存在两种工作模式,普通代理模式和加密隧道模式.

普通代理

这种工作模式和普通的 http 代理一样,mproxy 目前只做简单的 http 转发,不做任何页面的缓存。

加密隧道 (fanqiang 专用)

这种工作模式需要以 client,server 的模式进行配合使用,即 mproxy 分别作为客户端和服务端,并在客户端及服务端形成一个简单的加密隧道,从而躲过 GFW 的侦测。

编译

mproxy 可以运行在 unix-like 的操作系统下面,程序很小没有第三方的依赖,所以编译很简单,下面的一行命令搞定!

gcc -o mproxy mproxy.c

使用方法

作为普通的代理服务器。

./mproxy -l 8000 -d

这种工作方式对我们来讲意义不大,只做功能展示,重点在下面。

注: "-d" 参数表示程序作为 deamon 服务,避免终端退出程序结束

作为加密隧道的部署方式 (fanqiang 专用)

有 fanqiang 需求的同学需要使用 mproxy 分别作为本地代理和远程代理,并且指定两个代理之间传输数据的方式为加密方式。 注:fanqiang 的话远程代理服务器需要部署在不受 GFW 管制的国外 (找个便宜的 VPS 即可).

step1 : 在远程服务器启动 mproxy 作为远程代理

你需要把 mproxy 源码在远程的服务器编译 (直接拷贝二进制应该也可以) 然后运行下面的命令。

./mproxy -l 8081 -D -d

-D 指定接受数据进行解密,其对应参数'-E'应用在本地代理
-d 指定启动作为后台服务,避免终端退出程序结束

step2 : 本地启动 mproxy 作为本地代理,并指定传输方式加密。

在本地启动一个 mporxy 并指定目上一步在远程部署的服务器地址和端口号。

./mproxy -l 8080 -h xxx.xxx.xxx.xxx:8081 -E

-l 指定本地监听端口
-h 指定远端下一跳步的服务器地址及端口号,如果 fanqiang 需要是一台国外的服务器
-E 发送数据的时候进行加密,其对应参数'-D' 应用在远程代理

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
共收到 5 条回复 时间 点赞

不支持 windows 是硬伤,应该出一个编译版本~

#1 楼 @qddegtya 不是的,他的用意是在远端的服务器上部署的,不是客户端产品。现在服务器都是用 linux。很少用 windows 了

#1 楼 @qddegtya 原来还有个加密模式, 是我错了

#3 楼 @seveniruby 有没有弹出提示?

#4 楼 @lihuazhang 很多类型不支持, 我只是用了下代理,加密没用, 我是习惯了 ***。 使用代理 + 自建加密协议以后会是靠谱的方向

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册