C語言實現的一個最小的http代理:mproxy

jopen 10年前發布 | 210K 次閱讀 mproxy Web服務器

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增加一個情景模式就好,如下圖:

C語言實現的一個最小的http代理:mproxy

保存設置以后如果想KX上網的話就切換到你剛才配置的情景模式吧。

C語言實現的一個最小的http代理:mproxy

注: mproxy暫不支持windows用戶,但是可以和已經部署好的機器共享,只需要在switchSharp中把代理服務器的地址從“localhost"改成已經部署好mproxy的ip即可。

項目主頁:http://www.baiduhome.net/lib/view/home/1414460306981

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!