簡單的TCP代理服務器


我之前的一篇文章(http://www.cnblogs.com/MikeZhang/archive/2012/03/07/socketRedirect.html )中介紹過用python寫的一個簡單的http端口轉發程序,其實那個也算是個代理服務器,只是功能比較簡單罷了。由於這段時間在開發代理服務器,接觸到各個方面的資料,這里總結下,也方便我以后使用。

一、netcat實現

網址:http://netcat.sourceforge.net/

netcat是個很強大的工具,在網絡工具中有“瑞士軍刀”美譽不懂的搜索下,我就不多說了,相關用法可參考這里:http://en.wikipedia.org/wiki/Netcat

我主要演示下tcp代理。

1、首先開啟9000端口提供http服務

./httpShareWithTrace_linux64 9000

(這個可以參考:http://www.cnblogs.com/MikeZhang/archive/2012/08/10/httpShareGolang20120809.html

我們可以看下效果:

2、開啟端口轉發(tcp代理)

命令如下:

mkfifo backpipe

nc -l 12345 0<backpipe | nc 192.168.1.100 9000 1>backpipe

圖示如下:

和之前的圖比較后發現,用12345這個端口和9000這個端口訪問到的東西是相同的,說明代理成功了。

二、socat實現

網址:http://www.dest-unreach.org/socat/

這個和netcat功能類似,具體參考上面給的鏈接,這里我主要是給出代理的命令。

還以上面的情形為例(http還用9000的端口),命令如下:

socat TCP-LISTEN:8080,fork TCP:192.168.1.100:9000

效果如下:

三、Python實現(增強版)

網址:https://github.com/knownsec/rtcp

我之前寫的那個太玩具了,推薦用這個。

四、c++ boost 實現

網址:http://tcpproxy.codeplex.com/

這個是借助c++boost庫實現的,用的異步機制,寫的比較好。

五、go語言實現

網址:https://gist.github.com/3853140

這個是github上我的gist,這個實現很輕巧,功能很強大。

好,就這些了,希望對你有幫助。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM