0x00 前言
大家对HTTP代理应该都非常熟悉,它在很多方面都有着极为广泛的应用。HTTP代理分为正向代理和反向代理两种,后者一般用于将防火墙后面的服务提供给用户访问或者进行负载均衡,典型的有Nginx、HAProxy等。本文所讨论的是正向代理。
HTTP代理最常见的用途是用于网络共享、网络加速和网络限制突破等。此外,HTTP代理也常用于Web应用调试、Android/IOS APP 中所调用的Web API监控和分析,目前的知名软件有Fiddler、Charles、Burp Suite和mitmproxy等。HTTP代理还可用于请求/响应内容修改,在不改变服务端的情况下为Web应用增加额外的功能或者改变应用行为等。
0x01 HTTP代理是什么
HTTP代理本质上是一个Web应用,它和其他普通Web应用没有根本区别。HTTP代理收到请求后,根据Header中Host字段的主机名和Get/POST请求地址综合判断目标主机,建立新的HTTP请求并转发请求数据,并将收到的响应数据转发给客户端。
如果请求地址是绝对地址,HTTP代理采用该地址中的Host,否则使用Header中的HOST字段。做一个简单测试,假设网络环境如下:
- 192.168.1.2 Web服务器
- 192.168.1.3 HTTP代理服务器
使用telnet进行测试
$ telnet 192.168.1.3
GET / HTTP/1.0
HOST: 192.168.1.2
注意最后需要连续两个回车,这是HTTP协议要求。完成后,可以收到 http://192.168.1.2/ 的页面内容。下面做一下调整,GET请求时带上绝对地址
$ telnet 192.168.1.3
GET http://httpbin.org/ip HTTP/1.0
HOST: 192.168.1.2
注意这里同样设置了HOST为192.168.1.2,但运行结果却返回了