一个比较难的问题!

SimerJoe 2007-10-22 08:50:56
我需要实现一个这样的功能:
有一台客户机c1 二台服务器 s1 s2,c1向s1发送一个tcp链接请求,s1接受到以后不和c1建立链接,但是把这个请求转发给s2,s2接受到请求以后和c1握手并建立链接,开始传输数据.
对于c1来说,整个过程只有s1是可见的,s2是透明的.
不知道表述清楚没有.
...全文
201 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
SimerJoe 2007-10-23
  • 打赏
  • 举报
回复
控制客户端是不可能的,我也不打算控制客户端.如果是通过NAT访问,也会有相应的端口号呀,理论上也是可以链接上的.
至于tcp协议的传输机制......
iambic 2007-10-22
  • 打赏
  • 举报
回复
有必要么,搞个代理算了。
boxban 2007-10-22
  • 打赏
  • 举报
回复
我可以很负责任地告诉你:你的想法是不可能实现的。除非你能够控制服务器以及客户端的TCP IP协议栈。而多数情况下,客户端是不可控的。就算你能够控制客户端,如果C1是通过NAT访问Internet的话,你就一点办法都没有了。

你仔细阅读一下TCP协议就会明白,TCP协议有着一套完整、严密的数据传输机制。
SimerJoe 2007-10-22
  • 打赏
  • 举报
回复
s1发送给s2的是c1的地址.我的c1的地址是实际存在的,s2回复请求是一个实际的地址,怎么会是半链接状态呢.就是不知道这个"攻击"怎么发,嘿嘿.不过c1明明是请求的s1,这个时候来响应的确是s2,不知道c1会不会接受这个响应.如果不接受那就真成了自己攻击自己了.
proware 2007-10-22
  • 打赏
  • 举报
回复
那样的话,你从s1发起到s2的tcp连接请求会是一个半连接状态的吧??那不就是自己对自己的服务器攻击了...
proware 2007-10-22
  • 打赏
  • 举报
回复
噢..看来我理解是正确的...你搜一下..syn攻击及其防范技术..代码就没有弄过了..
技术上是可行的..
SimerJoe 2007-10-22
  • 打赏
  • 举报
回复
proware说的这个意思有点和我的想法接近了,但是还是有点点区别的,s2的应答部分,不应该再次通过s1转发,会浪费资源的.s2的应答应该直接答到c1上去.
总之,除了第一次c1发的syn以外,其他部分不应该再次经过s1了.至于s1是转发给s2还是s3,这些规则是在s1上面通过实时状态诀定的.
SimerJoe 2007-10-22
  • 打赏
  • 举报
回复
我说的透明是对用户来说的,应为用户一直以为自己和s1在通讯呢.他的每个tcp请求都是对s1发的.但是实际和他链接的却是s2.做为软件设计者和s1,肯定是知道s2的存在,但是c1的用户却不知道.
试想一下,某网站每小时接受1000w用户的浏览,在网站的机房,有n台服务器,但是我们每个人浏览器发送的请求是对应于他的一台服务器,但是这些请求却被他门分散掉了,分散给n台服务器去响应,所以,每个客户都能有比较快的响应速度.
每个tcp链接都是通过3次握手建立起来的,我们能否在第一次握手,也就是s1监听到c1的第一个syn的时候,把这个syn转给s2,让s2去响应,s2伪装成s1,向c1发出syn/ack,这时候建立起链接.以后通讯,就是s2 和 c1 之间的这2个"端"之间的事情了,和s1没有关系,直到链接断开.

这是我的想法,但是我没实现过.理论上是可以的,可能要修改tcp/ip协议的某些部分.麻烦有经验的提点一下小弟!
proware 2007-10-22
  • 打赏
  • 举报
回复
你的意思是c1发送syn报文到s1,s1一看是到s2的,那么s1就发送syn报文到s2,然后s2发送syn+ack报文到s1,s1收到后自己再发送syn+ack报文到c1,c1再发送最后的ack到s1,s1发送ack到s2....是这个样子???

可以参考syn攻击中的某个预防措施....
wang_wuhui 2007-10-22
  • 打赏
  • 举报
回复
s2接受到请求以后和c1握手并建立链接,开始传输数据.
那s2對於c1還能透明嗎?
SimerJoe 2007-10-22
  • 打赏
  • 举报
回复
预设的环境,硬件以及网络方面肯定是通的.
关键是软件怎么写.
我想应该是可以实现的,我们用浏览器的时候,客户端都不知道经过多少路由器才到达web服务器,但是看上去就像直接连接的一样.
我想,把s1,作为一个类似的代理.路由器也是不建立链接然后直接转发的嘛?
weiym 2007-10-22
  • 打赏
  • 举报
回复
要不就让s1转发数据,要不就让s1告诉s2 c1的地址,让S2联系C1,但要确保s2能够连上C1.
星羽 2007-10-22
  • 打赏
  • 举报
回复
c1 不做相应处理代码, 很难做得到

64,645

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧