代理是什么?(HTTP代理,SOCKS代理)

本来打算通过UDP53来绕过认证,在准备实现DNS隧道的时候,发现所涉及的内容实在是太多了…(DNS解析原理,域名的原理,隧道技术,代理技术 and so on),每一个知识点都能让我深入去研究一段时间。因此在实现DNS隧道的时候相当难受,走两步就碰到一个不会的知识点。遂先放开一段时间,先把其他知识点给搞通了,再回过头来实现DNS隧道。由此可见,基础不扎实在办事情的时候是相当dan teng的。

什么是代理?

虽然很早就接触过代理,但一直对这个问题没有很深入的理解。究竟代理的是什么东西?谁来做这件事?这些东西完全不懂,顶多就明白是有某种机制帮我完成了本该我自己去完成的东西。这几天看这些东西看得我脑阔疼,说说我的现在理解:

HTTP代理

我们正常的HTTP通信是这样的:

  1. 客户端先通过TCP与服务器建立一条连接
  2. 连接建立完成后,客户端向服务器发送请求(比如GET /hello.html HTTP/1.1,意为我想要取得服务器根目录/下的hello.html文件)
  3. 服务器接收到客户端发来的请求,找到所请求的文件,并通过原来的连接发回去。(接上条的例子,找到根目录/下的hello.html文件,并发送HTTP/1.1 200 OK,代表找到了这个文件,现在我就发送给你)
  4. 客户端接收到服务器传过来的文件,并用浏览器渲染出来给用户看(通过html/css以及js等把传回来的文本内容可视化,展示在屏幕上)

但我现在可能不想要按照人家的规定来访问,比如说我想访问根目录下的fxxk.html文件,然而又没办法直接跳转过去,那怎么办?这时候就轮到代理服务器出场了(当然这种需求改个url就可以了,这里只是举个栗子):

  1. 假设我们有一个受我们控制的代理服务器A。
  2. 客户端先与A建立TCP连接,然后告诉代理服务器A我想要访问某某网址根目录下的hello.html
  3. 代理服务器A收到请求,这时我们可以修改请求的内容,比如把hello.html改成fxxk.html。再建立一条到客户端指定网址的TCP连接,把这个新的请求的通过这个新连接发送过去。
  4. 这样在服务器看来,就好像是客户端请求了/fxxk.html一样,然后把所请求的内容返回回去,代理服务器再把内容通过第一条连接送回客户端…

总结一下,这次请求中,HTTP代理共建立了两条TCP连接:一条是客户端到代理服务器的,另一条是代理服务器到HTTP服务器的。这时代理服务器就好像一个中间商,可以看到你们双方交互的所有内容,并且也可以邪恶地更改这些内容。
顺便一说,代理https也是一样建立了这两个连接。客户端与代理服务器建立https连接,代理服务器又与HTTP服务器建立https连接,所以表面上我们是与代理服务器建立https连接的,这也是为什么在进行这种代理的时候需要导入代理服务器的https证书。
再举个栗子吧。比如说你小时候,和你爸爸路过麦当劳。这时候你想要吃甜筒,但自己又没money,于是你只能先告诉你爸爸:“爸,我想吃甜筒”。深思熟虑后你爸同意了(一般不太可能orz),他去店里跟店员买甜筒,并拿回来给你。这时,你先与代理服务器(你爸爸)建立连接,把请求(甜筒)告诉他,他再与店员建立连接并发送请求(买甜筒),最后把结果返回到你手中,你爸爸就扮演了一个代理的角色。

SOCKS代理

其实代理的原理都差不多,SOCKS代理运行在比HTTP代理更低的层次上,同样也是建立两个连接:先与来请求内容的客户端建立连接(1),查看请求内容,与真正的服务器建立连接(2)并发送请求。只不过SOCKS代理还会把中间通信的内容给加密了,因此这种代理更加安全。并且socks5还引入了认证以及多种加密方式和对udp等多种协议的支持,因此能更加安全可靠地帮你办更多事情。

你可能感兴趣的:(http,https,socks协议,代理,http,https,socks协议,代理)