C語言實現的一個最小的http代理:mproxy
mproxy 使用說明
這是一個微型的http代理服務器實現,使用c語言實現,核心代碼量不足500行,不依賴任何第三方的庫(只能工作在unixlike系統下面). 其主要功能如下:
- http代理
- 支持https隧道
- 支持簡單加密隧道
注:本代碼實現簡陋,完成倉促,目前還停留在一個原型的階段,經測試訪問非死book,推ter,油Tube ,google是OK的,但不保證所有的網站兼容性的問題,希望能夠起到一個拋磚引玉的作用。歡迎提交pull request 繼續完善. :)
通常情況下存在兩種工作模式,普通代理模式和加密隧道模式.
普通代理
這種工作模式和普通的http代理一樣,mproxy目前只做簡單的http轉發,不做任何頁面的緩存。
加密隧道(KX上網專用)
這種工作模式需要以client,server的模式進行配合使用,即mproxy分別作為客戶端和服務端,并在客戶端及服務端形成一個簡單的加密隧道,從而躲過GFW的偵測。具體的工作模式如下圖所示:
+----------+ +-----------+ +----------+ +----------+ | | | | | | | | | | | | | | | | | APP +------->| mproxy |+------> mproxy +------> Web | | | | | | | | | | | | client | | server | | | +----------+ +-----------+ +----------+ +----------+
編譯
mproxy可以運行在unix-like 的操作系統下面,程序很小沒有第三方的依賴,所以編譯很簡單,下面的一行命令搞定!
gcc -o mproxy mproxy.c
使用方法
作為普通的代理服務器。
./mproxy -l 8000 -d
這種工作方式對我們來講意義不大,只做功能展示,重點在下面。
注: "-d" 參數表示程序作為deamon服務,避免終端退出程序結束
作為加密隧道的部署方式(KX上網專用)
有KX上網需求的同學需要使用mproxy分別作為本地代理和遠程代理,并且指定兩個代理之間傳輸數據的方式為加密方式。 注:KX上網的話遠程代理服務器需要部署在不受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 指定遠端下一跳步的服務器地址及端口號,如果KX上網需要是一臺國外的服務器 -E 發送數據的時候進行加密,其對應參數'-D' 應用在遠程代理
step3 : 配置瀏覽器http代理使用mporxy本地代理
設置你的瀏覽器http代理指向你的本地代理,使用chrome瀏覽器的同學強烈推薦使用switchSharp,安裝完畢swichSharp以后只需要為switchSharp增加一個情景模式就好,如下圖:
保存設置以后如果想KX上網的話就切換到你剛才配置的情景模式吧。
注: mproxy暫不支持windows用戶,但是可以和已經部署好的機器共享,只需要在switchSharp中把代理服務器的地址從“localhost"改成已經部署好mproxy的ip即可。