我之前的一篇文章(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. kue

    尝试着看英文的文档,你发现他其实并不难. https://www.npmjs.com/package/kue

  2. Java 数组如何转成List集合

    问题描述:对于给定的如下数组,如何转换成List集合? String[] array = {"a","b","c"}; 参考stackove ...

  3. TCP/UDP协议

    body, table{font-family: 微软雅黑; font-size: 10pt} table{border-collapse: collapse; border: solid gray; ...

  4. 多线程--Thread.join方法

    在Thread类的Api中,Join的作用是让当前线程等待目标线程结束之后才继续执行. thread.Join把指定的线程加入到当前线程,可以将两个交替执行的线程合并为顺序执行的线程.  比如在线程B ...

  5. Nvidia Driver

    https://www.if-not-true-then-false.com/2015/fedora-nvidia-guide/ https://javacodes.cn/322.html https ...

  6. ansible入门01

    1.批量操作 1.操作系统选型与安装: 1.安装在实体机上: 批量安装: PXE(预引导执行环境):需要网卡上有DHCP客户端去加载bootloadder cobbler: kickstack: 2. ...

  7. 谈谈我对"闭包"的理解

    一.什么是闭包和闭包的几种写法和用法 1.什么是闭包闭包,官方对闭包的解释是:一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分.闭包的特点: 1. 作 ...

  8. jsp如何判断mysql数据库中是否已经存在添加的某条记录的方法

    String query="select * from hdxcy_info where XcyName='"+XcyName+"'"; String sqlS ...

  9. 记录一些js框架用途

    accounting.min.js 货币格式化alertify.min.js 提示信息库amd.loader.js 按需动态加载js文件angular-cookies.js 处理cookieangul ...

  10. supervisor 使用tips

    Supervisor (http://supervisord.org) 是一个用 Python 写的进程管理工具,可以很方便的用来启动.重启.关闭进程,supervisor可以同时监控多个进程,并可以 ...