前段时间搭建了一个 OpenVPN,发现其支持 HTTP 前向代理。
今天看到了一篇分析 HTTP 代理服务器的文章,发现其报文里面传送的是标准的 HTTP 头。
既然这样的话,为什么还能代理除了 HTTP(S) 之外的协议?
然后我又研究了下可否通过 HTTP 代理连接 SSH,也是可行的……
1
mind3x 2018-02-24 16:13:04 +08:00 via Android 2
|
2
noe132 2018-02-24 18:12:20 +08:00 via Android 1
因为 http(s)代理在完成 connect 部分后就相当于一条到指定主机端口 tcp 隧道。任何 tcp 流量理论上都可以通过此隧道转发。
|
3
noe132 2018-02-24 18:15:53 +08:00 via Android
http 代理通常是代替你请求资源。https 因为证书通常只能用 connect 做转发。
所以步骤是客户机发送 connect 请求连接到代理,代理收到请求后简历到指定服务器的端口的连接,并双向转发 tcp 数据包。 |
4
huangunic0rn 2018-02-24 18:22:30 +08:00
因为软件支持 CONNECT --
|
5
akira 2018-02-24 18:29:49 +08:00
只要发起方和代理方都有对应处理,你想代理什么协议都是可以的。协议只是约定了数据的格式,如果对数据做了二次封装,那以另外一种协议格式收发完全没问题啊。
例如一封普通信件,外面套个信封就是平邮,贴个邮票去邮局就能寄。外面再套个快递箱,发 sf 快递,对方当然也是可以收到的啊。 只是对方收到以后还需要拆一下快递盒子,再拆信封才能看到你的信件。 |
6
WuwuGin 2018-02-24 18:40:32 +08:00 via Android
笼统地说只要对面认识你发送数据的格式,HTTPS 毕竟再怎么说也是应用层的东西,依然是 TCP 协议,所以只是换了个马甲而已。
|
7
yuzenan888 OP @mind3x @noe132 @huangunic0rn @akira @WuwuGin
谢谢各位的解答。那这样说的话,HTTP 代理服务器只要可以支持 CONNECT 命令,那么想代理什么都没问题了? 还有,这样的话 SOCKS 代理还有什么存在的意义呢? |
8
wwqgtxx 2018-02-24 21:17:26 +08:00 via iPhone
@yuzenan888 socks5 还支持 udp
|
9
akira 2018-02-24 23:30:22 +08:00
@yuzenan888 协议更简洁
|
10
WuwuGin 2018-02-25 00:07:18 +08:00 via Android
@yuzenan888 每个协议都是发明出来对应某种特定的应用场景的,就像为什么只用 GPU 挖矿一样,无非就是同等成本下效率最高的选择而已。HTTP 代理相当于在普通的传输上再封装一次,普通场景下没人会用的,就像没人会花相同的钱买 CPU 挖比特币一样。
|