TCPproxy 是基于swoole实现的TCP数据包转发,可用于转发请求包到指定应用,可实现内网花生壳等类似功能。
原理图:
假设我们希望有一台机器A(ip 192.168.1.101)要开放端口6379给用户访问,但可能实际情况是用户无法直接访问到A(ip 192.168.1.101), 但却有一台机器B(ip 192.168.1.100) 可以开放一些其他端口给用户访问,为了让用户通过B(ip 192.168.1.100)能访问到A(ip 192.168.1.101)上6379端口,基于swoole实现的Tcpproxy解决了这个问题! 当然你可以联想到我们家里的内部机器是在外网无法访问的,可正好你有一台云服务器,所以我们可以通过Tcpproxy实现外部访问你家里的内网应用, 说到这里你可以完全把它当成内网花生壳的功能. 按照上面描述的情况,配置我们的服务选项后如下:
//守护进程模式 $proxy_conf['daemon'] = 0; //开放给用户的公网的ip $proxy_conf['public_ip'] = '192.168.1.100'; //开放给用户的公网的端口 $proxy_conf['public_port'] = 9999; //代理内部中转端口 $proxy_conf['public_proxy_port'] = 6677; //内部无法开放给公网的ip $proxy_conf['local_ip'] = '192.168.1.101'; //内部无法开放给公网的端口 $proxy_conf['local_port'] = 6379; //开放连接数 $proxy_conf['open_num'] = 10;
在B服务器运行
php proxy_server.php
在A服务器运行
php proxy_client.php
演示
//开放给用户的公网的ip $proxy_conf['public_ip'] = '127.0.0.1'; //开放给用户的公网的端口 $proxy_conf['public_port'] = 9999; //代理内部中转端口 $proxy_conf['public_proxy_port'] = 6677; //内部无法开放给公网的ip $proxy_conf['local_ip'] = '127.0.0.1'; //内部无法开放给公网的端口 $proxy_conf['local_port'] = 6379; //开放连接数 $proxy_conf['open_num'] = 10;
需要一台有公网ip运行proxy_server.php开放给用户访问
在你的内网运行proxy_client.php来代理你的应用
make #单以多进程模式运行 ./sproxy_process -s 127.0.0.1:6677 -t 127.0.0.1:6379 -c 10 -d #或以多进程多线程模式运行 ./sproxy_thread -s 127.0.0.1:6677 -t 127.0.0.1:6379 -c 10 -d
-d 指定以守护进程模式运行
-s 指定proxy_server.php内部地址和端口
-t 指定需要代理app运行地址和端口
-c 指定开启进程数量
http://www.quietsche-entchen.de/cgi-bin/wiki.cgi/manpages/tcpproxy.1 +subject: tcpproxy - generic TCP proxy server TCPPROXY(1) TCPPROXY(1) NAME tcp
http://shvechkov.tripod.com/nptp.html 转载于:https://www.cnblogs.com/itzxy/p/6628473.html
package main import ( "io" "log" "net" "strings" "sync" "time" ) func main() {} type remote struct { mu sync.Mutex addr string inactive bool } func (r
分享:tcpproxy实现 tcpproxy实现 http://my.oschina.net/NGINX08/blog/116181 posted on 2013-03-24 22:31 lexus 阅读( ...) 评论( ...) 编辑 收藏 转载于:https://www.cnblogs.com/lexus/archive/2013/03/24/2979824.html
问题:我需要一个TCP proxy,把发往8080端口的TCP请求,转到89端口上。这样,我一个TCP端口上的服务,可以用两个端口对外提供服务。 解决办法:下载rinetd for Windows版本,创建C:\etc\rinetd.conf配置文件,里面写上 192.168.100.110 8080 192.168.100.110 89 命令行下面启动rinetd 免费开源软件下载: http:
根据前文Nginx tcp proxy module试用的设置,在测试环境中发现tcp连接经常掉线。在该项目站点上找到一个issue,也谈论这件事情,不过别人用在web socket协议上。 其实就是少了几个设置,README的配置不能用于生产环境。 我的配置如下,现在工作正常了: tcp { timeout 1d; proxy_read_timeout
package com.xiaomi.dbproxy.action; import java.net.ServerSocket; import java.net.Socket; import java.util.Date; import java.util.List; import java.util.Random; import com.xiaomi.dbproxy.model.proxyS
例1: gogroxy作为tcp反向代理使用,需要一台具有公网IP地址的服务器,公网服务器和内网服务器在内网网络上是联通的。通过goproxy将内网服务器的内部端口,在公网服务器上暴露出来。 gogroxy软件网站:“https://github.com/snail007/goproxy”,软件使用golang开发,支持跨平台。可下载各类操作系统的binary版本。 例1:在公网服务器上运行如下命
简介 我们已经介绍了haproxy提出的proxy protocol协议,通过proxy protocol协议,服务器端可以获得客户端的真实IP地址和端口,从而可以进行一些非常有意义的操作。 为什么获得客户端的真实IP地址会非常有意义呢? 考虑一个藏在proxy背后的数据库,如果有多个客户端通过proxy进行数据库的连接,事实上因为都是通过代理进行连接,所以数据库中的所有的操作都是proxy服务器
摘要: 记录nginx对于tcp连接的代理配置 nginx.conf配置: worker_processes 1; events { worker_connections 1024; } stream { upstream socket_proxy { hash $remote_addr consistent; server 192.16
Grinder TCPProxy是用来过滤http/https通信的proxy,Java实现。它扮演一个中间人的角色,把Browser的请求发给Server,把Server的响应发给Browser。最关键的一点是它支持HTTPS,它的Socket可以读取到解密的数据,这样就可以监控任何经过它的信息。 它是开源项目,代码简单,可以很方便得学习、改造。
本文向大家介绍基于swoole实现多人聊天室,包括了基于swoole实现多人聊天室的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了swoole创建多人多房间聊天室的具体代码,供大家参考,具体内容如下 核心的swoole代码 基本的cs(client-sercer)结构不变,这里利用的是redis的哈希和set来储存和分组;从而达到了分组,统计,定时推送等功能;最后利用onclose事
本文向大家介绍Java实现基于TCP的通讯程序实例解析,包括了Java实现基于TCP的通讯程序实例解析的使用技巧和注意事项,需要的朋友参考一下 Java中的TCP通信程序 TCP可以实现两台计算机之间的数据交互通信的两端,要严格区分客户端与服务端 两端通信时的步骤: 1.服务端程序,需要事先启动,等待客户端连接 2.客户端主动连接服务器端,才能成功通信,服务器端不可以主动链接客户端 在java中两
我已经尝试TCP打孔一段时间了,论坛似乎对基于TCP的方法和C编程语言没有多大帮助。主要参考文献如下, 我的设置是 客户端A--NAT-A--Internet--NAT-B--Client B。 假设客户机A知道B的公共endpoint和私有endpoint,而B知道A的endpoint(我已经编写了一个服务器'S',用于在对等点之间交换endpoint信息),并且两个NAT都不对称,如果两个客户
本文向大家介绍基于jQuery实现的旋转彩圈实例,包括了基于jQuery实现的旋转彩圈实例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了基于jQuery实现的旋转彩圈。分享给大家供大家参考。具体实现方法如下: 运行效果图如下: 希望本文所述对大家的jQuery程序设计有所帮助。
本文向大家介绍基于C#的socket编程的TCP异步的实现代码,包括了基于C#的socket编程的TCP异步的实现代码的使用技巧和注意事项,需要的朋友参考一下 一、摘要 本篇阐述基于TCP通信协议的异步实现。 二、实验平台 Visual Studio 2010 三、异步通信实现原理及常用方法 3.1 建立连接 在同步模式中,在服务器上使用Accept方法接入连接请求,而在客户端则使用Connec
(更新) 看来我的问题表达得不够清楚。我的问题不是如何解析数据,如果它被分割成多个段。我的协议定义得很好(即START_COOKIE、LENGTH、DATA、CRC),并且我一收到数据就将其排入字节FIFO(上面代码段中的调用),因此我可以轻松地对其进行异步解析。 问题是,如果我看到的是第号包。1(100字节)(在Wireshark中+50ms)和数据包编号。2(100字节)在Wireshark中