笔记-HTTP代理
1. 基本原理
所谓代理,一个重要的目的是身份伪装,让被访问端无法正辨识访问者的身份。
那么下一个问题是服务器从哪些信息上来识别访问端的身份。
以php http服务器为例:
REMOTE_ADDR:访问客户端的IP地址
HTTP_VIA:如果有该条信息,就证明您使用了代理服务器,代理服务器的地址就是后面的数值。
HTTP_X_FORWARDED_FO:如果有该条信息,也证明了您使用了代理服务器代理服务器的地址就是后面的数值。
HTTP_ACCEPT_LANGUAGE:您浏览器所使用的语言集
HTTP_USER_AGENT:对大多数浏览器而言,这个值一般是Mozilla.可能还会包括浏览器的类型和版本号以及操作系统信息。
HTTP_HOST:网页服务器名称
1.1. 代理种类
代理有不同的级别,从无伪装到完全伪装。
使用不同种类代理服务器,上面的信息会有所不同:
- 没有使用代理服务器:
REMOTE_ADDR=您的IP
HTTP_VIA=没数值或不显示
HTTP_X_FORWARDED_FOR=没数值或不显示
- 透明代理服务器:TransparentProxies
REMOTE_ADDR=代理服务器IP
HTTP_VIA=代理服务器IP
HTTP_X_FORWARDED_FOR=您的真实IP
这类代理服务器还是将访问信息转发给访问对象,无法隐藏真实身份。
- 普通匿名代理服务器的情况:AnonymousProxies
REMOTE_ADDR=代理服务器IP
HTTP_VIA=代理服务器IP
HTTP_X_FORWARDED_FOR=代理服务器IP
隐藏了真实IP,但是向访问对象透露了使用代理服务器访问。
- 欺骗性代理:DistortingProxies
REMOTE_ADDR=代理服务器IP
HTTP_VIA=代理服务器IP
HTTP_X_FORWARDED_FOR=随机的IP
告诉了访问对象您使用了代理服务器,但编造了一个虚假的随机IP代替您的真实IP欺骗它。
- 高匿名代理:HighAnonymityProxies(Eliteproxies)
REMOTE_ADDR=代理服务器IP
HTTP_VIA=没数值或不显示
HTTP_X_FORWARDED_FOR=没数值或不显示
完全用代理服务器的信息替代了所有信息,就象是完全使用那台代理服务器直接访问对象。
2. 代理识别方法
代理识别可以从两个角度来考虑,首先是从客户端发过来的数据包头中去提取信息并验证身份,不过这种方式容易破解;第二种则是反向探测客户端,毕竟代理终归是服务器,其特征与个人终端有很大的不同。
下面列出了常见的代理识别方法:
- 反向探测技术:扫描IP是不是开通了80,8080等代理服务器经常开通的端口,一个普通的用户IP不太可能开通如上的端口;
- HTTP头部的X_Forward_For:开通了HTTP代理的IP可以通过此法来识别是不是代理,如果带有XFF信息,说明该IP是代理IP无疑;
- Keep-alive报文:如果带有Proxy-Connection的Keep-alive报文,号位疑问该IP是代理IP;
- 查看同一来访IP端口:如果一个IP中有的端口大于10000,那么该IP大多也存在问题。
- 其它信息,还有浏览器版本,操作系统版本,使用语言,COOKIE,机器名,登录用户名等等,如果IP一换再换,其他信息却从未变过,也是代理了。