穿越防火墙,写点心得,发点牢骚...

来源:互联网 发布:js input属性disabled 编辑:程序博客网 时间:2024/04/29 21:05

 

        最近一直都在搞TCP/IP网络通信的程序设计。老师让写个穿越防火墙的程序,刚拿到的时候真的是一点头绪都没有。甭说穿越防火墙了,就是普通的TCP/IP通信程序,大学的时候也写的很少。不过没办法,毕竟是boss,boss就是上帝,要不惜一切代价满足他的各种需求,即使某些需求是abnormal的。所以便充分利用互联网资源研究了一番,然后整了近半个月的代码。

        当然,成果是弄出来了,结论也出来了。其实原理相当easy,说到底就是利用防火墙“只管进不管出”的“漏洞”而已。防火墙肯定是指的主流的网关防火墙以及个人电脑的防火墙。这个“漏洞”,说实话,叫它为漏洞有点冤枉了它,因为用脚趾头都能想明白,如果防火墙“又管进又管出”,连数据都不允许随意往外发了,那未免太过了点。用了这样的防火墙,搞不好下载也不能用,ftp也不能用,qq也不能用,最过的,如果它连80端口也给限制了,上网的请求都可能发不出去了,这样的“全面功能”,估计要被人喷饭吧。

        不过也正是如此,才可以被黑客利用。搞过TCP和UDP程序设计的人都知道,只要有绑定操作,也就是有bind函数的使用,防火墙肯定会弹的。因为它意味着未来将有数据从你绑定的端口进来。对于TCP来说,绑定的目的是为了监听连接,也就是客户端发过来的连接请求;对于UDP来说,绑定的目的是为了在特定的端口接收消息,也就是实现端到端通信。总之都会有数据“进来”。防火墙的基本功能就是“防入侵”,当然得弹了。所以穿越防火墙的关键之一就在于把这个bind函数pass掉。

        当然,还有另外一个关键点,就是防火墙“不管出”的特点。还是说TCP的程序,当发起连接的时候,客户端的防火墙是不会弹的,因为数据是“出去”的而不是“进来”的,这样客户端在发起连接的时候就等于在自己机器上打了一个“”,这个“洞”就是发起连接的时候由系统分配的一个端口号。以后从这个端口号发进来的数据,防火墙都不会弹。

        跳过bind函数,“打洞”,有了这两条,穿越防火墙就可以实现了。简单点说,就是把黑客的机器当服务器用,把要攻击的机器当客户端用就行了。首先种植后台程序到待攻击的机器上,让它随系统启动的时候启动,并隐藏在系统进程中,启动后就主动向黑客的机器发起连接(当然,黑客的机器的防火墙肯定会弹了,但是这对于黑客来说就无所谓了,因为是自己定义的程序的连接端口号,是自己写的程序在连接);连接成功后,“打洞”就成功了,之后黑客就可以利用这个“洞”来对被攻击的机器“为所欲为”了。TCP的如此,UDP同样可以实现,只要让待攻击的机器的程序先向黑客的机器发一个UDP数据包就可以了,之后同样可以利用这个“洞”来“为所欲为”。

        所以,所谓的穿越防火墙,一言以蔽之,利用防火墙“只管进不管出”的特点,把黑客的机器当server用。

        结果呢,这个东西硬是被那些所谓的“专家”整成了什么TCP“反向连接技术”,搞的神秘兮兮的,服了。看来现在真的是什么研究成果,不管大小,都可以整一个专有技术名词,然后写一堆背景,搞一堆比较,画一堆图,最后再“躲躲藏藏遮遮掩掩”地把搞出来的这点“可怜”的“技术”公之于众,以显示自己是“专家”。之后就可以躺在这个“技术”上面吃饭了。

        不过也没办法,他们要不这么搞,论文量就上不去了嘛;论文上不去,呵呵,有他们熬的了。

        所以整个中国学术才搞成这个样子。

        哎,不说了,本来准备说点编程心得,居然开始骂学术了,以后得更低调点说话....

        !@#$^&*()_+{}|:"<>?

        over~~~~~