我之前的一篇文章(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,这个实现很轻巧,功能很强大。

好,就这些了,希望对你有帮助。

  • E-Mail : Mike_Zhang@live.com
  • github :https://github.com/mike-zhang

源地址:http://www.cnblogs.com/MikeZhang/archive/2012/10/09/tcpProxy20121009.html

简单的TCP代理服务器的更多相关文章

  1. Mina、Netty、Twisted一起学(一):实现简单的TCP服务器

    MINA.Netty.Twisted为什么放在一起学习?首先,不妨先分别看一下它们官方网站对其的介绍: MINA: Apache MINA is a network application frame ...

  2. 简单的http代理服务器

    简单的http代理服务器 本项目课程是基于 Python 实现的一个简单的 HTTP 代理服务器,要求用户需了解 Python 基础和一定的 HTTP 服务器基础知识.

  3. 简单实现TCP下的大文件高效传输

    简单实现TCP下的大文件高效传输 在TCP下进行大文件传输不象小文件那样直接打包个BUFFER发送出去,因为文件比较大所以不可能把文件读到一个BUFFER发送出去.主要有些文件的大小可能是1G,2G或 ...

  4. C#socket编程之实现一个简单的TCP通信

    TCP(TransmissionControl Protocol)传输控制协议. 是一种可靠的.面向连接的协议(eg:打电话).传输效率低全双工通信(发送缓存&接收缓存).面向字节流.使用TC ...

  5. Python之路(第三十一篇) 网络编程:简单的tcp套接字通信、粘包现象

    一.简单的tcp套接字通信 套接字通信的一般流程 服务端 server = socket() #创建服务器套接字 server.bind() #把地址绑定到套接字,网络地址加端口 server.lis ...

  6. 网络编程----------SOCKET编程实现简单的TCP协议

    首先我们须要大致了解TCP的几点知识: 1.TCP的特点:面向连接的可靠性传输 2.TCP的三次握手建立连接和四次挥手释放连接.但为什么TCP要三次握手建立连接呢? 答:由于两次握手无法保证可靠性.若 ...

  7. 简单认识TCP/IP协议

    HTTP协议—— 简单认识TCP/IP协议 本文转自: https://www.cnblogs.com/roverliang/p/5176456.html   大学没读计算机专业,所以很多的专业知识都 ...

  8. 一个简单的tcp代理实现

    There are a number of reasons to have a TCP proxy in your tool belt, bothfor forwarding traffic to b ...

  9. Beetle简单构建TCP服务

    使用Beetle构建TCP服务应用是件非常简单的事情,它并不需要你去关注Socket细节,如果你想用Socket编写高性能的TCP服务,那你要关注的东西非常多,异步数据处理,大量连接下的线程管理和连接 ...

随机推荐

  1. JAVA-随机生成四则运算

    代码如下: package jiajianchengchu; import java.util.*; public class jisuan { public static String yuefen ...

  2. DWZ 框架详解

    这是一个智障的框架,能别用就别用.

  3. 这些HTML、CSS知识点,面试和平时开发都需要 No8-No9(知识点:媒体操作、构建表单)

    系列知识点汇总 这些HTML.CSS知识点,面试和平时开发都需要 No1-No4(知识点:HTML.CSS.盒子模型.内容布局) 这些HTML.CSS知识点,面试和平时开发都需要 No5-No7(知识 ...

  4. 前端 crypto-js aes 加解密

    下载:npm install crypto-js --save 需要定义两个方法 ,分别是用于加密和解密,这里我将它放在了 utils 文件夹下,命名为 secret.js ,其具体代码如下: con ...

  5. [转]Ubuntu默认root用户密码

    Ubuntu默认root用户密码 在试验的过程中,安装完Ubuntu后忽然意识到没有设置root密码,不知道密码自然就无法进入根用户下. 到网上搜了一下,原来是这么回事:Ubuntu的默认root密码 ...

  6. jQuery hover 延时器实现代码

    例如: 复制代码代码如下: $('#foo').slideUp(300).delay(800).fadeIn(400);// 在.slideUp() 和 .fadeIn()之间延时800毫秒.  ho ...

  7. 升级安装windows8.1以后windowsphone8不能启动虚拟机的办法

    如果之前在的虚拟机是OK的话,VS2012需要安装update3补丁才可以. 下载地址:http://download.microsoft.com/download/D/4/8/D48D1AC2-A2 ...

  8. 知名第三方编译版tete009 Firefox 24.0

    Firefox除了官方版本上还有许多由爱好者自己编译修改的第三方版本. 其中 tete009 是十分流行的一个版本,目前tete009 Firefox 24.0 版本发布. tete009版Firef ...

  9. mysql远程连接的设置

    有时数据库所在机器与项目运行的机器不是同一个,那么就涉及到远程链接数据库了,配置远程连接数据库的步骤如下: 1.查看mysql数据库中,user表中的信息,如下图,先使用use mysql切换到mys ...

  10. ubuntu 11.04 Gnome 恢复默认的任务栏面板

    在Ubuntu(实际是GNOME) 中,桌面上默认的任务栏菜单面板是上下两栏,上面(Panel) 是系统菜单和通知区域下面是窗口存放切换区域,那么作为ubuntu用户来说,你总会使系统用起来更顺手更美 ...