由浅入深写代理(9)-ssh-代理.md

其实 ssh 不算是代理,只是一种能实现代理的工具,不过因为 ssh 功能强大,所以单独拿出来说一下。

0x01 本地端口转发

举个例子,远程有个 mongo 服务器需要连接,但是 mongo 不允许远程连接,只能通过和它同一个局域网的跳板机 A (x.x.x.x)连接。这个时候可以通过端口转发的方法直接连接。
命令格式是:

-L :: ```
1
2
3

例如本地开启了 8000 端口监听, mongo 服务器地址为 192.168.0.2 端口 27017, 跳板机地址 192.168.0.1:
``` ssh -N -L 8000:192.168.0.2:27017 192.168.0.1

开启完端口转发后,连接 mongo 可以直接通过命令 mongo –host localhost –port 8000

Read More

由浅入深写代理(7)-https-代理.md

本文主要实现隧道代理,让 https 请求也能代理。

隧道代理的原理是:
HTTP 客户端通过 CONNECT 方法请求隧道代理创建一条到达任意目的服务器和端口的 TCP 连接,并对客户端和服务器之间的后继数据进行盲转发。

Read More

由浅入深写代理(6)-http-代理.md

本文讲 http 代理,顾名思义,http 代理代理的是 http 请求,其实这里面分两类

* 普通代理 这种代理扮演的是「中间人」角色,对于连接到它的客户端来说,它是服务端;对于要连接的服务端来说,它是客户端。它就负责在两端之间来回传送 HTTP 报文。
* 隧道代理。它通过 HTTP 协议正文部分(Body)完成通讯,以 HTTP 的方式实现任意基于 TCP 的应用层协议代理。这种代理使用 HTTP 的 CONNECT 方法建立连接。

Read More

由浅入深写代理(5)-socks5-代理.md

既然 socks5 是协议,所以客户端也必须有 socks5 的实现才能和服务端连接。这里面我就用现成的开源库 PySocks 来演示下。

pySocks 有两种方式来实现,一种是直接的 s = socks.socksocket() 创建一个新的 socket 对象,还有一种是 Monkeypatching,算是 python 的黑魔法。

Read More