如何穿透 Symmetric NAT 啊

helloooo 2005-01-05 12:53:19
如何穿透 Symmetric NAT 啊

向各位请教!!!!!!
...全文
1400 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
helloooo 2005-02-26
  • 打赏
  • 举报
回复
sdsuper 2005-02-16
  • 打赏
  • 举报
回复
mark
tide2355 2005-02-16
  • 打赏
  • 举报
回复
Mark
iorikingdom 2005-02-15
  • 打赏
  • 举报
回复
UP,来讨论一下这个问题
iorikingdom 2005-02-09
  • 打赏
  • 举报
回复
没有见过Symmetric NAT,

不过我想如果是UDP的话可以这样实现例如公网服务器C,IP:(61.127.45.25)
公网NAT(61.128.45.55)内的客户机B(192.168.0.75),内网NAT(61.129.58.47)的A(192.168.0.82)
首先B和A进行通信前都向公网服务器发送心跳包,这样客户机B和客户机A就拿到了一个端口对照表
假设是B(192.168.0.75:2000<->61.128.45.55:5000)和A(192.168.0.82<->61.129.58.47)
这样B要跟A通信的话,就用raw socket也好,winpcap也好都伪造公网服务器C的IP地址来发包(包里面可以把来源地址和端口写进去,这样对方就知道是跟哪个IP通信)虽然源IP用的是公网的IP,但是经过解包了以后,一样可以解决问题啊,这样A就可以收到B的包了,同理B也可以这样跟A通信,从此B和A都就可以同心跳包来维持这个端口,这样算不算穿透?
iorikingdom 2005-02-09
  • 打赏
  • 举报
回复
用UDP不算穿透?
shootingstars 2005-02-08
  • 打赏
  • 举报
回复
同意 skykeen(天佑神州)的。
楼上的一些说可以使用http隧道过NAT的可能还没有理解NAT到底完成的什么工作。http隧道一般是用来骗过允许http协议通过的防火墙。

我想穿透Symmetric NAT或许只能通过端口猜测,其实这个原理倒不是很难,前提是这个Symmetric NAT的端口分配是按规律增长的,并且这个网络不是太繁忙。
gaooo 2005-02-08
  • 打赏
  • 举报
回复
gz
gdy119 2005-02-06
  • 打赏
  • 举报
回复
让所有的数据包经过HHTP(80或者8080)的端口出去,伪装成HHTP协议的TCP包
就能实现穿透
hjunxu 2005-02-06
  • 打赏
  • 举报
回复
学习
sharkhuang 2005-02-06
  • 打赏
  • 举报
回复
学习Symmetric NAT
skykeen 2005-02-06
  • 打赏
  • 举报
回复
http://www.codeguru.com/Cpp/I-N/internet/http/article.php/c6209/ http Tunnel能部分通过FW(防火墙),但解决不了Symmetric NAT穿越的问题。
www.artdio.com.tw/tw/download/faqs/IPF_2000_FAQ.pdf 中stun依然只能解决Cone NAT,对Symmetric NAT也是无能为力的。

p2p通信至少面临着两个障碍1:NAT(网络地址转换,地址映射) 2:FW(防火墙)
先看看NAT,NAT存在意义1:解决ipv4里地址溃乏,2:网络安全:
NAT分Cone NAT,Symmetric NAT两类;其中Cone NAT又分1:不受限,2:ip受限,3:ip port受限三类
而Symmetric(对称) NAT对于不同的外网结点,内网port映射到外网时会发生改变,甚至是ip;也就是说通过Symmetric情况会是这样:内网里结点A 192.168.0.100::1500--(Symmetric)-->66.27.51.88::18000 与公网211.120.121.10::5000通信,但是该结点A 192.168.0.100::1500-|(Symmetric)|->与公网187.120.121.10::5000(或者211.120.121.10::6000)通信时,其外网地址将不再是66.27.51.88::18000(也就是说在与187.120.121.10::5000 通信前其外网地址是不可知,这一点与Cone不一样,Cone NAT只是在某程度使外网地址与内网地址受限,但A与外网ps1通信和与ps2通信时地址一样的),与不同通信对象通信,其映射地址也不一样,这就是穿越Symmetric NAT的真正难点,而穿越Cone NAT可以参考 shootstars那个贴子。我知道有人用动态预测法解决穿越Symmetric NAT问题,但是成功率并不是100%,如果你能100%穿越Symmetric NAT,

看看FW,FW存在意义:网络安全:
FW与NAT根据是两码事,其没有网络地址转换的概念,只有网络安全意义,但与NAT实现不一样,NAT的安全性是由地址映射和映射访问受制造成的,而FW的网络安全是FW过滤外网访问者发过来某种(防火墙可以设置)诸如协议类型(如http,ftp,udp,tcp,icmp etc)数据(解决方法:把受限协议包装成不受限协议发给),或者过滤某些特定端口的数据(解决方法:使用其开放端口)。

综上:p2p(我指:允许公网server中转信令,两个不同内网里的两个结点直接进行媒体通信)要同时穿越NAT和FW,难度不小。如果你的p2p能够在两个内网间通信,并不见得你完成了p2p,那得看你穿越了Symmetric NAT,穿越了FW没有。在有些环境中使用p2p同时穿越Symmetric NAT,FW是不可能的,你不要说使用什么public server中转(代理)技术,我讲的是两个不同内网里的两个结点允许public server中转信令,但是两者要直接进行媒体通信(p2p);

关于NAT:根据我的测试,网吧里,小公司使用的都是Cone NAT,只有对安全要求很高的公司,组织或个人才使用Symmetric NAT;如果网吧用Symmetric NAT,我想这个网吧肯定要破产,因为很多p2p游戏和工具过不了Symmetric NAT;也就是说:对于一般P2P应用,大家可以只考虑Cone NAT,因为在安全要求很高的公司使用p2p是不被允许,也就是说:即使你实现了穿越Symmetric NAT,也不会有多大市场,因为你的BOSS不公许你使用,这也是对安全要求很高公司的定义。

再次对一些声称能成功穿越NAT的人说一句:你那个玩意只是穿越了Cone NAT,但你没遇到Symmetric NAT,或许你根本不知道这个东西。

要测试你的NAT类型,可以写两个socket程序,一个Client,一个Server;或者简单点,在baidu上搜索一个叫stun的测试工具(包括Client ,Server),注意client动行在内网上,NAT在内网与外网间,server要运行在两个外网址址上;
helloooo 2005-01-08
  • 打赏
  • 举报
回复
^
kingzai 2005-01-05
  • 打赏
  • 举报
回复
www.artdio.com.tw/tw/download/faqs/IPF_2000_FAQ.pdf
HunterForPig 2005-01-05
  • 打赏
  • 举报
回复
HTTP Tunnel 的例子
http://www.codeguru.com/Cpp/I-N/internet/http/article.php/c6209/
BruceJiang 2005-01-05
  • 打赏
  • 举报
回复
能不能讲详细点
zhujianping_es 2005-01-05
  • 打赏
  • 举报
回复
Use HTTP Tunnel

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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