nickdlkk / HttpTransparentProxy

http,https transparent proxy

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

http,https 透明代理

透明代理就是不对请求做解析和更改,直接进行流的转发。

Https 请求由于加密也无法解析,只能通过 CONNECT协议走隧道(Tunnel)代理。

普通 http 透明代理和 CONNECT 隧道代理的唯一区别就是隧道代理第一个请求是明文的 CONNECT 请求, 从请求头中解析出远程主机的 host 和 port 然后建立和远程主机的 TCP 连接,连接建立后代理给客户端 返回 200 Connection Established 表明到远程主机的连接已经建立。 客户端就开始发送实际的请求,代理就盲目转发 TCP 流就可以了。

CONNECT 请求不能转发给远程主机,只有代理能识别 CONNECT 请求。

所以透明代理实现很简单,我只需要解析第一个 HTTP 请求(其实不用解析一个完整的HTTP请求, 只解析请求行和部分header就够了,由于TCP分包粘包的问题你要把读到的第一个包保存下来,如果不是CONNECT请求 还要原样发送到远端服务器的。但用 NETTY 解析一个完整的FullHttpRequest 处理比较简单),判断是不是 CONNECT 请求就行了, 之后的处理就都一样了,盲目的转发 TCP 流就行了。

About

http,https transparent proxy


Languages

Language:Java 100.0%