`
xitongyunwei
  • 浏览: 930101 次
文章分类
社区版块
存档分类
最新评论

穿透防火墙的方法

 
阅读更多

穿透防火墙的方法---http tunnel:我的理解和疑惑 欢迎交流!!

楼主HuangRG(.....)<clk>2004-07-27 13:32:21 在 VC/MFC / <nobr id="clickeyekey1" style="border-bottom: 1px dotted rgb(102, 0, 255); text-decoration: underline; color: rgb(102, 0, 255); background-color: transparent;" onclick="$cE.defer(this);kwC(event,1)" oncontextmenu="return false" onmouseover="kwE(event,1, this)" onmouseout="kwL(event,this)" onmousemove="kwM(1)">网络</nobr>编程 提问</clk>

目前正在做一个即时通信的项目,我负责通信方面的开发,主要要解决两个问题:穿越NAT与穿透防火墙。到目前为止根据NAT Server的实现原理已经解决穿越NAT;但穿透防火墙我怎么也想通它的原理。我准备用http tunnel实现穿透防火墙,下面是我对http tunnel的理解:
客户端与服务器通信过程:
UDP<-->HTTP Client<---通过Internet--->HTTP Server<--->UDP Server
客户端与客户端通信过程:
UDP<-->HTTP Client<---通过Internet--->HTTP Server<--->UDP Client
我想我这样的理解应该是错的吧?因为如果通信过程是这样的话,就直接用TCP Client与TCP:80 SERVER通信就是了。为什么要绕一个圈子?
有经验的兄弟请指点!3Q。

问题点数:100、回复次数:27Top

<iframe src="http://topic.csdn.net/Include/Board.htm?Tags=" frameborder="0" scrolling="no"></iframe>

1 楼rainsly(Godd)回复于 2004-07-27 13:55:58 得分 20

>>直接用TCP Client与TCP:80 SERVER通信就是了
这样说本身就是对的
使用http tunnel实现穿透防火墙原理就是因为很多的防火墙可能会关掉UDP端口关掉很多的TCP端口
但一般都会开放HTTP的80、8080、8000端口
所以使用HTTP来传输数据
你把UDP包和HTTP来回转换是没必要的,或者说多此一举的Top

2 楼HuangRG(.....)回复于 2004-07-27 14:13:08 得分 0

rainsly(落英):
你的意思是直接用HTTP实现数据交换?是不是?请指点.Top

3 楼shootingstars(有容乃大,无欲则刚)回复于 2004-07-27 17:34:20 得分 50

HTTP不是基于tcp的么?你如何使用udp来搭载http的数据?
呵呵,我对http tunnel不熟悉,过来学习。Top

4 楼shootingstars(有容乃大,无欲则刚)回复于 2004-07-27 17:36:18 得分 0

另外楼主说穿越NAT已经实现,过Symmetric NAT实现了吗?如果实现了,请教是如何实现的?
Top

5 楼MFCClass(EightDog)回复于 2004-07-27 17:37:36 得分 0

学习
Top

6 楼MFCClass(EightDog)回复于 2004-07-27 17:39:48 得分 0

对呀http是基于tcp的
Top

7 楼ydfok(发芽的石头)回复于 2004-07-27 17:45:17 得分 0

淘金中...Top

8 楼NeoBean(Neo-Bean)回复于 2004-07-27 17:48:26 得分 0

CSDN上有张很好的文章来介绍NAT的,如果你看过所有的问题都应该很好解决。Top

9 楼yhqs540(Reich)回复于 2004-07-27 18:04:11 得分 0

置顶贴有。

http tunnel是吧下层的协议内容搬到http协议中。通过安全连接或者普通连接穿透防火墙Top

10 楼HuangRG(.....)回复于 2004-07-27 19:50:22 得分 0

shootingstars(有容乃大,无欲则刚):
实现http tunnel我也很不能理解啊.ICQ的做法,好像就是我上面说的一样:有一个Http Proxy Client与Http Proxy Server,通过以上两上实现ICQ Client与ICQ Server通信,以上两者起数据转发作用。哪位兄弟做穿透防火墙的项目?哪位兄弟知道OICQ是怎样穿透防火墙的?
关于穿透NAT,针对我自己的应用已经实现了;另外如果在特殊的情况下,出现Client与Client直接通信不成功,我就采用Server转发。希望可以和你讨论。
如果想不通HTTP Tunnel的原理的话,我的Server就用TCP:80实现,而且Client与Client全部通过Server转发。

置顶帖好像说什么都不知道,应该只是一个普通的TCP的转发代理吧。

Top

11 楼HuangRG(.....)回复于 2004-07-27 19:51:49 得分 0

腾讯公司的兄弟怎么都不出现?Top

12 楼shootingstars(有容乃大,无欲则刚)回复于 2004-07-27 21:16:37 得分 0

我没有实际做过http tunnel,不过我认为就是用http协议来传输你需要传输的数据。这种方法唯一的好处就是或许可以过防火墙(大部分防火墙的规则会允许http数据通过)。

但是http是基于tcp的,因此即想使用http tunnel过防火墙,又想使用udp过NAT,这两者是相矛盾的。
我想使用http tunnel的环境应该是:当客户端位于防火墙之后,客户端连结服务器有困难时。即http tunnel仅仅用于有防火墙的客户与服务器的连接。

呵呵,个人意见,仅供参考。Top

13 楼keios(C->C++->java->C 循环中)回复于 2004-07-27 23:45:26 得分 20

http tunnel 我理解是通过 http 协议做隧道传递其他的网络应用数据。
我见过的socks2http是这样的:
App Client -> Http Tunnel Client -> [http 协议,通过防火墙] -> Http Tunnel Server(拥有公网IP的Http Server) -> Socks Proxy Server -> App Server 。
这样一来, App Client -> Http Tunnel Client 之间就必须要走一种代理协议,为了使支持的应用更具有普遍性,常见的选择是 socks 协议,因为支持 socks 代理的应用程序比较多也容易实现。这样Http Tunnel Client 同时也是一个Socks Proxy Server,同样Http Tunnel Server要将Http Tunnel协议翻译成Socks代理协议,再后面的就是普通的代理模式。
Http Tunnel Client 和 Http Tunnel Server 之间走的是建立在 http 上的,并能双向传递任意数据的 Tunnel 协议(比如通过Http GET, PUT 传递数据和地址信息等),鉴于http协议的非连接性,通常Http Tunnel Client要向Http Tunnel Server 轮循以接收随时可能从App Server发出的数据。

希望对楼主有所帮助。
Top

14 楼rainsly(Godd)回复于 2004-07-27 23:52:21 得分 10

大致意见同 shootingstars(有容乃大,无欲则刚)Top

15 楼HuangRG(.....)回复于 2004-07-28 09:14:42 得分 0

非常感谢大家的参与!
shootingstars(有容乃大,无欲则刚):
想使用http tunnel过防火墙,又想使用udp过NAT
------------------------------------------
<clk>用TCP:80穿透防火墙,同样也可以用TCP过NAT Server。因为NAT Server也是支持TCP穿过的。对于穿透NAT Server,<nobr id="clickeyekey0" style="border-bottom: 1px dotted rgb(102, 0, 255); text-decoration: underline; color: rgb(102, 0, 255); background-color: transparent;" onclick="$cE.defer(this);kwC(event,0)" oncontextmenu="return false" onmouseover="kwE(event,0, this)" onmouseout="kwL(event,this)" onmousemove="kwM(0)">我们</nobr>首先要做的是理解NAT Server的实现原理。本质上NAT Server是一个数据转发服务器。 </clk>
Top

16 楼HuangRG(.....)回复于 2004-07-28 09:19:24 得分 0

keios(每天跑5圈):
首先对你的回答表示感谢。
你所说是可行的;但如果实际中按你的说法去实现的话,有点不可行。其实我的理解与你是类似的。
Top

17 楼alec626(月吻长河Blog:spaces.msn.com/filebase)回复于 2004-07-28 09:29:59 得分 0

有谁有 http tunnel的协议代码,我想参考一下
zjh626@yahoo.com.cnTop

18 楼shootingstars(有容乃大,无欲则刚)回复于 2004-07-28 09:30:57 得分 0

To 楼主:
不知道楼主使用TCP穿透NAT的理解是否与我一样,我的理解是:两个客户端都在NAT之后,在这两个客户端直接使用TCP建立连接。(这才是P2P啊)

如果只是使用TCP:80与公网服务器连接,这个算不上穿透吧。NAT本来又叫透明代理。在这种模式中,NAT完全是透明的。Top

19 楼HuangRG(.....)回复于 2004-07-28 13:00:20 得分 0

shootingstars(有容乃大,无欲则刚):
当然是两个客户端直接通信。Top

20 楼HuangRG(.....)回复于 2004-07-28 13:03:54 得分 0

alec626(月吻长河):
已给你发送http tunnel源码。Top

21 楼shootingstars(有容乃大,无欲则刚)回复于 2004-07-28 13:29:03 得分 0

To 楼主:
我知道卡耐基梅隆大学的人已经验证了可以在两个内网之间建立TCP的连接,你是使用的此种方法吗?如果不是,能否介绍一下你的方法?十分感谢。

但是,经过NAT映射后的公网地址的端口肯定都在1024以上,怎么可能使用TCP:80端口来连接另外一个内网的计算机呢?Top

22 楼superdai(淨居天人)回复于 2004-07-28 13:49:12 得分 0

继续研究。Top

23 楼HuangRG(.....)回复于 2004-07-28 14:28:14 得分 0

shootingstars(有容乃大,无欲则刚):
你说得很对,位于NAT1后的一个Client1想要连接NAT2的指定端口(在我们这里 TCP:80)可能无法实现的;因为位于NAT2后的Client2无法决定NAT2的端口。这也是我想解决的问题。所以我觉得我对http tunnel的理解存在错误。如果没有找到一个合理的解决方法的话,我要采用我上面说过的笨方法:Client与Client的通信全部通过Server 转发(TCP:80)。这种方案在我的这个项目中还是可行的,因为一般情况下,Client的个数不会超过2000个。Top

24 楼HuangRG(.....)回复于 2004-07-28 14:30:39 得分 0

shootingstars(有容乃大,无欲则刚):
另外你所说的“经过NAT映射后的公网地址的端口肯定都在1024以上”,确定吗?如果要我实现NAT Server,我不会让与内网IP:PORT对就的PORT在1024以上,我觉得没有必要这么做。Top

25 楼shootingstars(有容乃大,无欲则刚)回复于 2004-07-28 15:17:03 得分 0

另外你所说的“经过NAT映射后的公网地址的端口肯定都在1024以上”,确定吗?
---------------------------------------------------------------------
对这个问题我不是很确定,但是我不止一次的看到类似下面这样的话。所以。。。

Address Overloading

Sometimes called Port Address Translation (PAT), this is where each client uses the same IP address but uses a different port. A good example is access to a web server. Users from a private address, say in the 10.0.0.0 network, have their individual addresses translated to just one legal IP address but separate port numbers between 1024 and 65535. They can all have separate conversations with a web server having just one address and destination port of 80 (HTTP). This applies just as well if one user has several sessions with the same web server, the different port numbers distinguish the sessions.


qq的udp打洞穿越防火墙??

楼主lzn1(lzn1)<clk>2005-01-12 16:52:02 在 VC/MFC / <nobr id="clickeyekey1" style="border-bottom: 1px dotted rgb(102, 0, 255); text-decoration: underline; color: rgb(102, 0, 255); background-color: transparent;" onclick="$cE.defer(this);kwC(event,1)" oncontextmenu="return false" onmouseover="kwE(event,1, this)" onmouseout="kwL(event,this)" onmousemove="kwM(1)">网络</nobr>编程 提问</clk>

在双方客户获得了对方的地址后,同时往对方发送打洞包时,因为ip地址是对方nat
的地址,端口是对方nat分配的临时端口,如果本方的防火墙没有开发这个端口,则这个打洞包发送不出去
也就没有办法形成点对点连接,在用工具观察qq时,发送对方的端口永远都时8000,这是怎么回事呢???
我公司内部可以使用qq,也就是防火墙开放了端口 8000,4000,其他好像没开放
我该如果才能和对方建立点对点连接呢??是不是qq有一种技术能让对方nat在分配端口时总是分配8000,这好像
不可能吧??? 问题点数:50、回复次数:10Top

<iframe src="http://topic.csdn.net/Include/Board.htm?Tags=" frameborder="0" scrolling="no"></iframe>

1 楼kingzai(stevenzhu)回复于 2005-01-12 17:08:31 得分 0

http隧道技术Top

2 楼shootingstars(有容乃大,无欲则刚)回复于 2005-01-12 17:47:35 得分 10

发送对方的端口永远都时8000
--------------------------
这个对方的IP应该是服务器才对。这是在使用http隧道技术。但是并不能建立两个内网计算机之间的直接连接,而是通过服务器转发信息。Top

3 楼HunterForPig(留着口水的猪)回复于 2005-01-12 19:01:57 得分 10

使用的是http隧道技术
就是通过http 代理服务器,将tcp,udp报封装在http 协议通过80端口
http://community.csdn.net/Expert/topic/3214/3214447.xml?temp=.5146601
Top

4 楼oyljerry(【勇敢的心】→ ㊣提拉米苏√㊣)回复于 2005-01-12 20:01:48 得分 10

通过http tunnel技术,通过http的80端口出去Top

5 楼aoosang(智慧的鱼)回复于 2005-01-13 10:25:36 得分 0

老大来给讲一下http的隧道问题啊Top

6 楼tjjccnu(tini)回复于 2005-01-13 10:46:44 得分 10

呵呵,我原来还以为是直接通过tcp建立p2p的连接呢?
偶自己搞了个内网的p2p,是直接通过tcp建立p2p连接,现在正困饶如何穿过nat呢?
有兴趣的一起研究研究,留个邮箱,我把代码发过去,一起搞搞!
看能不能搞个自己的qq!Top

7 楼yct009(唯一)回复于 2005-01-13 14:20:35 得分 0

luxingjyp@tom.com

偶有兴趣啊,正想学呢,一起研究吧Top

8 楼gdy119(夜风微凉)回复于 2005-01-13 15:45:53 得分 0

是可以搞,我也研究了一段时间了
过外nb的人已经搞出来了,我有些资料 ^_^Top

9 楼phoenixsharp(小星星)回复于 2005-01-13 18:04:11 得分 10

那是QQ的服务器IP,现在好像全部都是通过它"中转"的(至少在表面是数据发到服务器),因为完美而直接的P2P真的很难以实现呢~
至于是那个什么HTTP技术就搞不懂了..学习..Top

10 楼sharkhuang(走吧走吧!人总会慢慢长大~)回复于 2005-01-13 20:05:57 得分 0

走http代理出去啊!所以能上网就能上qq
http://www.vckbase.com/document/viewdoc/?id=1773
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics