posts - 264,  comments - 573,  trackbacks - 8

随笔分类

文章分类

相册

收藏夹

Weblogs

搜索

  •  

最新评论

Project:ReverseProxy
Author:dragonimp

2005.4.13 开始,建立在TCP基础上,必须有个外网主机,还有一个内网主机
2005.4.14 已经有了比较稳定的连接,但是功能上很多还只是临时的
2004.4.15 支持一个内网代理负责多个外网代理连接.

连接过程:

  • ProxyServer启动(安装在外网)
  • 内网代理启动,向ProxyServer注册信息(现在以用户名的形式)
  • 外网代理启动,向ProxyServer请求二级代理(发送二级代理用户名)
  • 内网代理收到ProxyServer转发的请求,向外网代理发起连接
  • //=====对于每个请求都进行下面的步骤
  • 建立一条从内网到外网代理的通道(利用上面的连接信息,不需跟再向ProxyServer请求了)
  • 外网代理的请求通过建立的通道发送给内网代理(先当于二级代理)
  • //=====传输完毕关闭通道,释放通道资源

目前的问题:

  • 原来想的简单通过建立TCP,然后断开,建立二级代理模式,这种不可行,因为是TCP,断开以后防火墙就不再认了,下次连接用同样的端口也会被拒绝.,所以才用上面的建立通道后直接使用该通道
  • 因为内网跟外网建立通道必须同步,所以现在必须等待内网建立连接,其他的必须挂起,所以速度慢了点,这个估计可以改进.
  • 现在还有很多细节问题没处理.
  • 现在只支持HTTP(TCP连接)

使用方法:

  • ProxyServer安装在我外面的服务器,所以的都用这个服务器.
  • 先叫一个内网的人运行ReverseProxyLan
  • 然后叫一个外网的人运行ReverseProxyWan(默认开启8000端口)
  • 如果是个人使用,运行ReverseProxyWan后,IE设置代理为127.0.0.1:8000就可以
  • 其他人连接需要知道安装ReverseProxyWan的IP和端口,作为代理端口.

2005.4.15 解决通道同步问题.利用第一次建立的通道进行传送命令,当需要连接时,外网代理通过这个通道向内网发送请求(不需要ProxyServer),由内网代理建立新通道.因此可以把内网代理建立通道移到线程里面处理,这样其他的连接就不需要等待这个完成了,不会挂起,这样速度OK了.

2005.4.16 发现原来挂起的问题还是问题啊. 原来内网放到线程里面了,可是外网的代理没有放到线程里面,这样还是会挂在那边,不能并行,所以把它也放到线程里面,这样就并行了

2005.4.16 补充几个设置输入(ProxyServer地址和端口)

使用第一次建立的通道用来传送命令,就相当于监听了,这样解决了二次代理也放在外网监听而不能同步的问题.原来采用轮询,现在这样感觉是比较合理的.也就是说原来要通过ProxyServer的任务在第一次以后就有这一次建立的通道来完成.

现在新的连接过程(比较详细):

  • ProxyServer启动(安装在外网)
  • 内网代理启动,向ProxyServer注册信息(现在以用户名的形式)
  • 外网代理启动,向ProxyServer请求内网代理(发送内网代理用户名)
  • 内网代理收到ProxyServer转发的请求,向外网代理发起连接,建立一条通道用来协调控制两端
  • //=====对于每个请求都进行下面的步骤
  • 外网接到一个连接请求,通过控制通道发送命令给内网代理,同时进入监听状态
  • 二级代理收到命令,建立一条从内网到外网代理的通道
  • 通道建立以后,外网代理的请求通过建立的通道发送给内网代理(先当于二级代理)
  • 内网代理处理请求把结果发给外网代理.
  • //=====传输完毕关闭通道,释放通道资源

需要解决的问题:

  • 出错处理后资源的释放,好像还有问题(网络差的时候就会出现)
  • 断开时资源的释放.完整的释放应该是:无论是请求端放弃还是获取端放弃,整个通道必须释放.
  • 发布的问题.这个问题看来没什么方法解决的,就知道ms的野心的很,它迟早要让它的.net framework布满天下的,所以也由不得分解,必须完整安装framework. 现在也没有办法,我干嘛喜欢用.net了呢.

发现这样写下来对整个问题的发现很有帮助,写着写真就发现问题了,而且也会有新的思路出来.不过这个应该要停一下了,这几天先把其他的事情干了.真累.

2005.4.16 断开连接后重连的处理,整理了一堆的东西.
2005.4.16 ProxyWan可以设置控制端口,这样如果NAT可以进行端口映射的话也就可以使用了.

2005.4.17 做了一些修改,考虑把proxyServer,proxyWan,proxyLan三个都移到窗体界面,但是要保留原来的控制台,同时还考虑服务.不管用什么界面都必须只要一个相同的DLL,也就是现在做的DLL要考虑兼容任何的调用,所以还得改动不少东西.

2005.4.18 完成了ProxyServer的窗体界面.
2005.4.18 突然想到一个非常cool的idea,这是我已经做了但是没有想到的^_^. 因为我现在的ProxyLan还能支持二级代理(现在界面上没有提供输入),所以ProxyLan可以使用其他得代理连接.但是这样proxyLan的二级代理还只是一般的二级代理,而不是我这个反向代理.今天把三个结合在一起的时候发现,其实ProxyLan还是可以再支持反向代理的,这可以通过在本机再运行ProxyWan,去反向连接另外的代理,同时,ProxyLan的二级代理设置为本地代理,这样就可以一直反向代理下去,哈哈哈哈.....

2005.4.19 完成整个ReverseProxy的窗体界面,现在把三个集成在一块好多了. 为了做到同时支持控制台,DLL写的时候日志输出采用委托(代理)实现.写窗体的改得好辛苦,本来用console就不用管主线程,现在窗体自己要一个线程,其他得都得放到下一个,不然窗体就卡住了.

2005.4.19 发现其他的协议都不能通过HTTP上.用STERM里面的HTTP代理连接测试了一下,发现那边请求的HTTP只有一个目标主机,而且使用CONNECT命令,我原来处理头部用HOST,现在看来不能了,改成空格判断. 原来直接转发的也不行,还要另外处理CONNECT命令. 在网上看到也确实有CONNECT这回事,所以问题是清楚的~~~ 现在只要处理CONNECT就可以支持其他协议代理的转化.

2005.4.20 整理了很多代码.想到CCPROXY,果然CCPROXY是支持CONNECT的,也是开启PROXYLAN的二级代理,连接到CCPROXY,让CCPROXY来处理CONNECT,果然能够连上,不过就显示了第一页就停了,很明显,我早就料到会这样了,因为我现在还是用完连接就断开,这对于网页来说是可以的,但是对于需要持久连接的就不行了.

2005.4.21 这两天都没有实质上的进展,其实最要还是在考虑KEEPALIVE的问题,因为后面要CONNECT

2005.4.22 终于让我不用CCPROXY的情况下CONNECT上了廷芳的23端口了,而且还显示了一屏.:)算是搞定了CONNECT命令,但是对于怎么持久还是一个问题.遇到一个变态问题,也没异常就不知道停在哪里了.

2005.4.23 搞定CONNECT

2005.4.24 发现CONNECT在远程有问题,真不知道怎么搞得,本地好好得,外面就有问题.又把一些东西整理了一些,现在把问题搞定了. 因为发现如果调试断点在那边,然后就好好得,如果直接运行就出错,而且说是没有连接. 所以就想到延迟看看行不行.没想到还真行了. 而且通过判断当前是否有数据来结束延迟. 不过这个办法还土了,而且这个问题还是莫名其妙. 反正现在正常了,就不管了.明天干别得事了,争取这几天把那些鸟东西做好,然后五一看看要回家还是出去哪里玩一下,不能再这样下去了. 五一回来再开始毕设吧.

2005.5.1 解决Post时得错误(长度计算错误)

2005.5.11 如果有时间,准备下一步的工作:做处于两个防火墙后面的连接.

2005.6.3 这个问题确实比较头痛,TCP的连接还没有看到哪里有实现.难怪没人做,看来是我低估了难度了. 又看了好多的资料,可是对那个简单的方法表示怀疑. 那文章的意思里面是A先发个SYN包给B,然后A进入监听(当然是用同样的端口绑定),然后B发送SYN就可以跟A建立连接(当然B也是用刚才的端口). 我怀疑的地方就是A先发出去的是SYN,照常下一步应该收到SYN+ACK,但是B却还是发SYN呀,并不是SYN+ACK,难道防火墙会允许通过吗?如果我做防火墙,我肯定判断下一个是不是SYN+ACK,而不只是看端口和协议.但是那文章却是这样说的... 不管怎么样,先做一下试试看就知道了.

2005.6.3 做了一些清理,还有重新整理了好多地方. 按照那篇简单的方法做了一下,不过还没有机会测试.而且只是在连接这一步,如果连接成功的话,再考虑其他的

2005.6.4 做了才知道其实这个真的不好做.就算可以连接成功,但是每次连接都要经过好多步骤,这样对于网页来说很不合适,因为网页是一个页面都同时下载页面上其他的东西,这样一次都需要重新建立好多连接.现在两一边也是再NAT后面速度就很不好说了. 不过我一直很想对这个通道做个什么处理,然所有的数据都经过这个通道而不需要重新建立连接,不知道有没有办法. 先不管了,看看测试通道能不能...现在找不到条件呀.

posted on 2005-04-15 13:31 dragonimp 阅读(1938) 评论(4)  编辑 收藏
标题  
姓名  
主页
内容   
请输入验证码:
*
  登录  使用高级评论  Top 订阅回复  取消订阅
[使用Ctrl+Enter键可以直接提交]