问题是这样的: 现在有很多网关防火墙,都设置为只允许TCP的80端口通过,其它的端口都封掉了。这样想传输数据,就只能通过80端口了,比如QQ对于这种情况,可以使用http代理。这样就实现了使用http协议传输自己的数据的功能,因为是走的tcp的80端口,所以防火墙就不会拦截。 但是现在我需要传输实时语音数据,这种语音数据都是用UDP来传输的,为什么不用TCP来传输语音数据,是因为语音对实时性的要求很高,不要求可靠,对于部分丢失了的包,不必重传,可以用语音算法来弥补。如果用这种走TCP 80端口中转的方式,就会牺牲了实时性,因为TCP会自动丢包重传、滑动窗口拥塞控制等。 现在的一个想法是:不用TCP的这些丢包重传等特性,只用TCP的标志头,通过自己封包来传输数据(比如raw socket),这样就即满足了语音传输的要求,又能通过防火墙。也就是说使用TCP的标记,但像UDP一样使用,自己来控制丢包、拥塞等问题。 需要同时考虑发送端和接收端。我想发送端自己封包发送,可能相对简单一点;对于接收端,在数据链路层或网络层,通过某种技术(如NDIS等)判断如果是自己的数据包就拦截下来,否则就交给上层正常处理。 实现上不限技术,不知这种想法可行么?欢迎讨论。
如果不可行,发送传输和接收,我想知道究竟是哪部分不可行呢?个人的分析:`
1. 对于发送部分,我想采取类似raw socket的方法,参考
http://www.langzhou.com/lz_48716_e9.htm
http://www.chinaspx.com/archive/develop/7162.htm
(使用NDIS驱动等是否可以达到相同的功能?NDIS我不熟,还希望熟悉NDIS的朋友指点)2. 对于数据包在网络中的传输,会有问题吗?首先网关防火墙是不会拦截的,那么是否会受到IP分片与重组的影响呢,我个人觉得不会。3. 对于接收部分,在数据包到达传输层之前,判断是自己的包,就拦截下来,就像网络防火墙(如天网)一样,用NDIS。
首先需要你要在80端口上做拦截
这样会有被认为是木马的可能性
------
这个先暂时不担心。只讨论技术是否可行。
N3Software(N3软件网络)
网关内可不只一台机器, 如果要外网访问访问网关内机器, 就算可以用80端口传送数据也是不行的.
------
是内网主动访问外网的80端口。
对于网关(路由器)防火墙来说,通过它的数据包和浏览器上网、网际快车下载文件是一样的
sevencat(七猫)
不可行!!!
------
可以具体说说吗
不可行!!!
----------可以具体说说吗
不过,即使用udp一样会面对防火墙封端口的问题,还是需要单做个中间接收程序,来检测80端口接收服务器端发送过来的封装后的数据报,如果是检测到本应用包,再还原到原来的数据包。
也就是常说的httptunnel技术。
所以不管楼主使用什么协议,这一步都是必不可少。
非常感谢,你给了我一些自信 :)
>> pig_2000() ( ) 信誉:82
你可能没有明白我的意思。httptunnel的本质上还是TCP。
其实我所想要的,既不是TCP,也不是UDP,因为它们都有缺点(TCP的速度慢,UDP不能过防火墙),我要的是一个“非标准TCP”,一个不带丢包重传功能的TCP,它不可靠,但是效率比标准TCP高,就像UDP一样。实现上,只可能从驱动上入手,是否可行还不确定
也许试了才知道,目前正在研究NDIS中间层驱动
用的NDIS IMD驱动
牛!!!!
顶,玩驱动,是不是就等于组合拉tcp/ip的一些功能(或者说修改拉传统的协议达到一定的创新)!