现在有的公司网管配置内网的机器只能连外部的80端口,而且,相互之间的数据必须是HTTP的数据,如果不是,它就直接丢弃。而且有的ISP也这样,如果服务端绑定在80端口,而跑的是自定义协议,那么也会把它干掉,客户端连上后,数据发不到服务端,服务端的数据也发不到客户端。
我现在打算在服务端跑一个自定义的代理,客户端数据加一个HTTP的POST头,发送到代理,代理剥掉这个头,发送给服务器,服务器发给客户端的数据则由代理加一个HTTP 200头,返回给客户端,客户端剥掉这个头获取真正数据
现在我的问题是:如何写这2个头,让它们顺利自由进出,要求:头尽量简洁,Content-Type必须能是任意数据,而且透明进出,发送方是什么,接收方就收到什么,不会被网关等丢弃或篡改。

解决方案 »

  1.   

    我写了一下,不晓得有什么问题,请精通HTTP协议的高手来指点
    HTTP/1.1 200 OK
    Date: Thu, 10 Mar 2005 02:46:26 GMT
    Server: Apache/2.0
    Accept: */*
    Content-Type: multipart/form-data
    Content-Length: 100真正响应数据100字节POST /Request HTTP/1.1
    HOST: 127.0.0.1
    User-Agent: Mozilla/5.0
    Accept: */*
    Keep-Alive: 300
    Connection: keep-alive
    Content-Type: multipart/form-data
    Content-Length: 50真正请求数据50字节
      

  2.   

    搜索一下HTTP隧道的东西,可能有用。
      

  3.   

    有一个socks2http的软件,你可以研究一下
      

  4.   

    我们经常收到一些在公司和企业工作的朋友的信,他们诉苦说,由于有网关的限制,所以除了能够在网上浏览网页外,其他诸如:ICQ、FTP、ICR、Napster、网络游戏之类精采的东东都无法使用。并希望我们能够将他们从“贫瘠的沙漠”中解救出来。其实这主要是由于大多数的企业为了安全原因,在网络中设置有防火墙,这样既可以防止非法用户访问公司局域网内的电脑,同时也可使内部员工访问Internet,管理员一般会设置只允许一定的应用程序穿越防火墙,而常常将例如:ICQ、POP3信件收取、PC Anywhere之类的软件限制掉。  我们经过查询和参看相关的网站,终于为这些朋友找到了几个可以突破网关限制的软件,下面就请大家一起来看看吧。ICQProxy   这是一个可令ICQ冲破HTTP代理服务器限制的软件,它的工作原理是在你的系统中模拟ICQ服务器,将原来ICQ使用的端口4000改用为端口80,这样ICQ所发送的数据首先送到ICQProxy客户端,再由它通过HTTP代理服务器传送到该软件公司免费的HTTP-Tunnel服务器,接着由该服务器将数据送至真正的ICQ服务器,正是依据这种转发机理,使用户可以正常使用ICQ与朋友们聊天。下载:ICQProxy具体使用方法可参看:ICQProxy帮助中文版(http://members.tripodasia.com.cn/Movie/ICQProxy.htm)提示与技巧:如果你的公司或单位只允许员工浏览网页,可你又想与朋友进行即时聊天,其实不用其他软件便可实现这一愿望,那就是使用微软的MSN Messenger。HTTP-Tunnel  这个软件与ICQProxy同出自一家软件公司,与ICQProxy的原理一样,但它的功能更为强大,可支持任何支持Socks5协议的网络应用程序,用户可利用它来使用ICQ、Oicq、AIM、Yahoo Messenger、Napster等软件。另外,如果你使用的是ICQ 99b,或是遇到ICQ2000无法使用的情况,可选择ICQProxy。下载:HTTP-TunnelSocks2HTTP  Socks2HTTP可以将SOCKS 5请求转换成HTTP请求,使其能够穿越HTTP代理服务器。由于SOCKS协议允许程序穿过任何端口的防火墙,所以许多软件都选择使用该协议,如:Napster、Gnutella、CRT等。Socks2HTTP为这些SOCKS客户程序模拟了一个轻巧的SOCKS服务器,使它们可以冲破HTTP代理服务器的限制(支持HTTP POST模式、可以穿越几乎所有HTTP代理服务器/防火墙),执行相应连接。该软件的工作原理为:先将Socks请求转换为HTTP请求,然后通过HTTP代理服务器连接到软件的公司主页,接着由它转化成Socks并发送出去。  如果你的公司或单位只允许员工浏览网页,并关掉了80之外的端口,那么SocksHTTP可以解决你的烦恼,用上自己心爱的网络软件,比如上面提到的软件。当然用它也可以上OICQ,不过据说效果不是太好,速度相当慢。Socks2HTTP也可以在不支持SOCKS的TCP/IP客户端程序中使用,包括Telnet和FTP。另外,如果与下面介绍的SocksCap32配合,效果将会更佳,像以前不能用的FTP、E-Mail、Telnet以及即时聊天等软件都可再获新生。下载:Socks2HTTP具体使用方法可参看:通过HTTP代理实现SOCKS代理功能的SOCKS2HTTP教程SocksCap32  这是由著名的NEC公司开发的透明代理软件(该公司在Socks5的开发上做了大量工作)。它可以使那些基于Windows的通过TCP或者UDP协议通讯的客户端软件自动穿越Socks代理服务器,让几乎所有基于TCP/IP协议的软件(如各种浏览器、下载工具、FTP上传软件等)都能使用Socks代理出国。你甚至可以用它与其他网络软件结合,通过两次代理访问被屏蔽掉的网站。另外,NEC公司还开发有一个更为全面、强大的客户端软件--e-Border Client。下载:SocksCap32具体使用方法可参看:SocksCap使用指南e-Border Client  我们上面曾提到过NEC公司在Socks5的开发上作了大量工作,而e-Border则是该公司推出的最为完整的Socks解决方案。e-Border Client是相应的客户端软件,它不仅能够连接到NEC专门的e-Border服务器,还可连接普通Socks5代理服务器。提供强大的Socks5代理调度,还能截取你系统里的所有连接请求,将它们通过代理连接出去。  另外,该软件还可以代理诸如:DiabloII、星际争霸的战网连接和石器时代、万王之王等网络游戏的服务器登录。如果你使用的是局域网或是169而想玩在线游戏,在SocksCap32无能为力时,用它试试,可能会有意外之喜。  相比我们以前曾经介绍过的软件,e-Border Client的最大特点是,自动截取所有连接请求,这样网络软件无需另行配置就可以通过它连接出去,非常方便。不过,我们在试用中也发现,当使用软件的探测功能查找e-Border服务器时,却被告知结果为0,这样用户就必须先在网上找到可用的Socks5代理服务器才行,而且这方面的资源相对较少。最后就是,由于该软件对系统进行了深层设置,所以可能会影响某些软件的正常使用。下载:e-Border Client具体使用方法可参看:完整的Socks解决方案HTTPort  现在许多公司和单位出于安全和其他方面的考虑都在内部设置防火墙,架设代理服务器,并禁掉了80以外的所有端口,员工们只能进行浏览网页的操作,而FTP、IRC、即时聊天等网络功能则根本无法使用。HTTPort就是什么这种情况而设计的,它能够以HTTP协议通过内部代理服务器连接到外面的公用Proxy,然后将内容传回来,从而骗过内部Proxy,冲破限制,让用户可以使用其他网络服务,比如:FTP、POP3等。但令人遗憾的是,该软件不支持UDP,所以ICQ、OICQ也就无法通过它使用了。下载:HTTPortFileGateway  FileGateway能够让你通过HTTP代理服务器/防火墙上传文件。该软件是一个既是客户端程序,又是服务器端程序的FTP类型的系统,能够让你通过HTTP协议传输文件,它实际上可以访问并穿越所有类型的代理服务器/防火墙,甚至那些没有提供SOCK支持的也不在话下。 下载:FileGateway
      

  5.   

    GNU httptunnel 
    http://www.nocrew.org/software/httptunnel.htmlHTTP RPC Security 
    http://msdn.microsoft.com/library/default.asp?URL=/library/psdk/rpc/ov-http_04qh.htmHTTP Tunnel software for Windows
    http://http-tunnel.com/newpage/index.htm
      

  6.   

    那个HTTP Tunnel用的是HTTPS的加密隧道吧,需要开启443端口,没有对数据进行HTTP封包,对于严格的应用型防火墙根本不行的。
      

  7.   

    大家可能对我的问题还没有看太清楚,我的意思就是在自定义协议上包一个http的壳,以便通过严格限制http的防火墙或者代理
      

  8.   

    局域网主机向外网主机发出请求文件下载:
          GET aaa.EXE HTTP/1.1
          Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*
          Accept-Language: zh-cn
          Accept-Encoding: gzip, deflate
          User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; Maxthon; Alexa Toolbar)
          Cookie: MSNADS=UM=; MC1=GUID=0e5d9f4fd7b474439d38d1ab7a8979d4&HASH=4f9f&LV=20051&V=3
          Connection: Keep-Alive
          Host: download.microsoft.com
    外网主机回复:
          HTTP/1.1 200 OK
          Content-Length: 8969416
          Content-Type: application/x-msdownload
          Last-Modified: Fri, 12 Nov 2004 02:56:20 GMT
          Accept-Ranges: bytes
          ETag: "c71a263063c8c41:8037"
          Server: Microsoft-IIS/6.0
          X-Powered-By: ASP.NET
          Date: Thu, 10 Mar 2005 15:38:49 GMT
          Connection: keep-alive
    后接数据Content-Length: 8969416 为你要的长度,可以设大点
      

  9.   

    关键是客户端也有可能要发大数据啊,所以GET请求可能不行,它带不了多少数据,而且不能是任意数据吧,比方我的自定义数据是一个结构体
      

  10.   

    你用sniffer 抓下HTTP Tunneling 的包,看下包头就知道了.
    服务器端发给客户端的应该没问题,因为包后接的是二进制数据,你放什么进去都可以.
    客户端往服务器端的话,可能是会有问题
      

  11.   

    请求发过去,竟然说我的请求有错,说是BAD_REQUEST_NO_HOST,我HOST填的是IP,这个有问题吗?而且是在80端口,奇怪