您的位置:首页 >> 编程开发 >> Visual C++ >> 正文
RSS
 

HTTP隧道(HTTP代理Socket客户)

http://www.rdxx.com 06年12月17日 10:01 互联网 我要投稿

关键词: 代理 , Socket

HTTP 隧道 (HTTP代理Socket客户)

--------------------------------------------------------------------------------
这篇文章贡献自Akash kava,   翻译: bugfree/CSDN
环境: VC6


※HTTP 隧道※
--------
HTTP是基于文本的通过浏览器检索网页的协议。 大多数情况下你躲在代理服务器的后面,通过LAN接入互联网。 在IE的Connection Option中, 你给出你的LAN的设置。 这个代理服务器运行着基于文本的协议, 你从它那里可以得到外界的网络HTTP相关的数据。是的, 用HTTP通过它上面的小的望孔可以连接到外部世界, 并用二进制协议得到你想要的数据, 或者甚至是你的协议。 它通过HTTP。

※HTTPS 解释※
---------
在HTTPS中, 数据以一种安全的方式从浏览器到服务器和从服务器到浏览器。 它是二进制的协议; 当他穿过代理时, 代理不知道是什么。 代理仅仅允许二进制流打开, 让服务器和客户两者之间交换数据。 代理服务器认为我们在进行某个安全的会话。


对于HTTPS, 你的浏览器连接到代理服务器,并送出一个命令

CONNECT neurospeech.com:443 HTTP/1.0 <CR><LF>
HOST neurospeech.com:443<CR><LF>
   【...如果需要,HTTP头部的其它行以<CR><LF>结束 】
<CR><LF>    // 最后的空行


接下来, 代理服务器把它作为某个HTTP安全会话, 打开一个到需求服务器和端口的二进制流。 如果连接确立, 代理服务器返回如下回应:


HTTP/1.0 200 Connection Established<CR><LF>
         【...忽略所有HTTP头部的其它行以<CR><LF>结束,】
<CR><LF>    // 最后的空行

现在, 浏览器连接到了终端服务器, 可以用二进制和安全的方式交换数据了。


※怎样做这个※
-------------
现在是你的程序任务去愚弄代理服务器, 行为如IE一样进行 Secure HTTP。

1. Connect to Proxy Server first.
2. Issue CONNECT Host:Port HTTP/1.1<CR><LF>.
3. Issue <CR><LF>.
4. Wait for a line of response. If it contains HTTP/1.X 200 , the connection is successful.
5. Read further lines of response until you receive an empty line.
6. Now, you are connected to outside world through a proxy. Do any data exchange you want.


示例源代码

  // You need to connect to mail.yahoo.com on port 25
  // Through a proxy on 192.0.1.1, on HTTP Proxy 4480
  // CSocketClient is Socket wrapping class
  // When you apply operator << on CString, it writes CString
  // To Socket ending with CRLF
  // When you apply operator >> on CString, it receives
  // a Line of response from socket until CRLF


  try
  {
    CString Request,Response;
    CSocketClient Client;

    Client.ConnectTo("192.0.1.1",4480);

    // Issue CONNECT Command
    Request = "CONNECT mail.yahoo.com:25 HTTP/1.0";
    Client<<Request;

    // Issue empty line
    Request = "";
    Client<<Request;

    // Receive Response From Server
    Client>>Response;

    // Ignore HTTP Version

    int n = Response.Find(' ');
    Response = Response.Mid(n+1);

9 7 3 1 2 3 4 8 :

 
 
标签: 代理 , Socket 打印本文
 
 
  相关资讯
RSS
 
 
 
  热点搜索
 
 
 



Valid XHTML 1.0 Transitional
Copyright ©2005 - 2008 Rdxx.Com,All Rights Reserved
收藏本页
收藏本站