Tcp p2p 点对点 穿透 战败!

wangzhe1945 2009-01-08 03:44:19
加精
前几天在做一个文件点对点传输的项目,涉及到NAT穿透,从上个星期到今天一直在调试和测试,最后到今天,看来已经战败!

以下是两篇是我作为技术依据的文章:

http://blog.csdn.net/ssihc0/archive/2008/10/10/3053395.aspx
http://hi.baidu.com/wangzhe1945/blog/item/3e72fffe47fc2f365d60080c.html
http://hi.baidu.com/wangzhe1945/blog/item/5ccd3fa4e3ee67f09152ee38.html

总的技术原理归纳如下:
首先还是 AB分别和服务器S分别建立连接,S记录AB的互联网实际终端。然后S分别向AB发送对方的实际终端。接着,从A和B向S连接时使用的端口,AB都异步调用connect函数连接对方的实际终端(就是S告诉的终端),同时,AB双方都在同一个本地端口监听到来的连接(也可以先监听,再connect更好)。由于双方都向对方发送了connect请求(假设各自的SYN封包已经穿过了自己的NAT),因此在对方connect请求到达本地的监听端口时,路由器会认为这个请求是刚刚那个connect会话的一部分,是已经被许可的,本地监听端口就会用SYN-ACK响应,同意连接。这样,TCP穿透NAT的点对点连接就成功了。

自己写的代码穿透失败。下载了别人p2p TCP 穿透的代码 http://download.csdn.net/source/700961 ,发现如果2个机器在同一个局域网(同一内网)内是可以传输文件,但是不同的陆游器(不同内网)下,穿透不成功。


我不是高手,p2p TCP 穿透 战败。
...全文
6205 223 打赏 收藏 转发到动态 举报
写回复
用AI写文章
223 条回复
切换为时间正序
请发表友善的回复…
发表回复
querystringcom 2012-05-23
  • 打赏
  • 举报
回复
顶上去
NewUser2008 2012-05-11
  • 打赏
  • 举报
回复
.net 4.0 有专门的P2P 类
一根葱的无奈 2012-04-30
  • 打赏
  • 举报
回复
这个强帖啊!
kkylove 2012-03-13
  • 打赏
  • 举报
回复
我的测试也失败了,杯具...有没有哪位仁兄写成功过!
quzhaojing 2012-03-05
  • 打赏
  • 举报
回复
要有一个公共网络的服务器,才能在两个局域网中间打洞哦
lianbin_zhao 2011-12-14
  • 打赏
  • 举报
回复


膜拜...太深奥了,没研究过。支持
LeeHGMaster 2011-11-22
  • 打赏
  • 举报
回复
TCP穿透是用在特定环境下的,非特定环节也不会有需求
谁学逆向工程 2011-09-29
  • 打赏
  • 举报
回复
哭了,死活找不到这方面的技术书
DragonYF 2011-06-12
  • 打赏
  • 举报
回复
居然没有权限修改自己的回复,NND。
第一点中说的那个TCP包中的内容是固定的。应该改成TCP包中的包头部分内容是固定的。
DragonYF 2011-06-12
  • 打赏
  • 举报
回复
我原来有研究过一段时间,不过最后没有完成,后来有段时间看了资料,有启发,但是没有去做,现在说说大致的想法,你可以尝试去做下,不一定成功!
第一,A或者B和S的链接都是成功的,这个我们先这样认定,也就是说A或者B和S的握手都是正确的,不管经过了多少的路由器,TCP的包中的内容都是固定的。
第二,这时候如果把S向A发送的包给拦截下来的话,也就是说假设S已经不像A发送数据,那么B把自己的TCP发送的包中的IP地址和端口改成S向A发送包的IP地址和端口,这时候A一样认为是S给他发送了数据,并向S发送了返回TCP包,那么S接收到,判断TCP包序号的时候就是错误的值,但是这个包确实能被S接收到,并最终丢弃!
第三,假设,我只是假设,并没有确实的代码实现,也没有测试过,假设S这时候不像A和B发送任何的数据,但是前面已经把对方的IP地址,端口号,以及TCP序号等都发送到了A和B,那么A把IP地址,端口号,以及TCP序号,进行相应的修改,同时B把同S的链接中的IP和端口号也同时改成了A的IP和端口号,这样就可以欺骗B机器自己,接收到A发送过来的数据!对于B机器来说这个链接不能是新建立的,因为新建立的链接需要重新握手。可能真正困难的是B机器如何将和S的链接中的IP地址和端口改成A机器和S链接封包中的IP和端口。
其实整体的思路就是保持A,B同S的链接,保证这个链接不会断,导致重新握手,然后就是欺骗对方机器和欺骗自己,让这2台机器还是认为自己是在和S对话,其实数据是在A和B中传送。
mou631257005 2011-04-11
  • 打赏
  • 举报
回复
[Quote=引用 100 楼 lwderopnm 的回复:]

必须顶起来。!!!!
[/Quote]!!!
bbsworks 2011-04-09
  • 打赏
  • 举报
回复
加油!据说最近油涨价了,还是要加油的!
cinqonlines 2011-04-08
  • 打赏
  • 举报
回复
我也在研究TCP穿透 至今也失败。
happyer_longlong 2011-03-28
  • 打赏
  • 举报
回复
需要个桥梁
yangquanlaohou 2011-02-17
  • 打赏
  • 举报
回复
留名,等高手解答再来看...
liankang828 2010-12-08
  • 打赏
  • 举报
回复
进来学习的
全栈深入 2010-12-05
  • 打赏
  • 举报
回复
支持,继续努力
善古 2010-07-29
  • 打赏
  • 举报
回复
没学过,来帮顶一下
createhappyhome 2010-07-25
  • 打赏
  • 举报
回复
坚持就是胜利!!!
誰是方長 2010-06-23
  • 打赏
  • 举报
回复
顶吧,都还不懂~!
加载更多回复(189)

110,545

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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