2007-01-19
proxy header
通常,一般的浏览器(IE or Mozilla)都不会提交象偶上面这么简单的HTTP请求的,它还会把一些有关信息包括进去,比如浏览器的版本以及操作系统版本,(User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0),这样HTTP服务器就可以得到更多的客户端的信息,偶们监听这个HTTP会话的话,也可以看到这些信息。
HTTP客户端(浏览器)通过HTTP Proxy来访问某个HTTP服务器的过程大概如下:
HTTP请求-> HTTP请求->
HTTP Client ------------------ HTTP Proxy (更改某些HTTP头部信息) ------------------- HTTP Server
<-HTTP应答 <-HTTP应答
HTTP Proxy基本上会做一个中间人的位置,以自己的身份向HTTP服务器发起请求,这个HTTP请求的主要内容来自HTTP Client发给HTTP Proxy的请求,但是某些细节可能会有改变,HTTP Proxy甚至会加一些信息进去(怎么样,是不是眼前一亮啊?这就是偶们的机会了)。
OK,确定我们的方向,只要发现某个HTTP请求中有HTTP Proxy加进去的信息,那么我们就可以判断某个IP是HTTP Proxy了,甚至可以判断出真正提交这个HTTP请求的非法用户的真实IP。
HTTP Proxy何其多啊,xxbin熟悉的只有Linux/UNIX下著名了squid和M$ ISA Server(原来的M$ Proxy)中带的HTTP Proxy,偶只能针对这两个HTTP Proxy来讨论,下面的方法,对其它的HTTP Proxy是否适应,偶没有条件测试不了。 而且下面所描述的协议的细节,并不是RFC中的规范,仅仅是针对某几个产品的一些特性。 (不过HTTP Proxy,这两大巨头是占了相当市场份额的,还算是有点代表性的说)
通常,HTTP Proxy会更改或者添加以下的HTTP请求变量:
当没有使用HTTP Proxy的时候,这几个变量的值应该如下:
当你使用了普通配置的HTTP Proxy的时候,这几个变量就变成下面的样子了:
REMOTE_ADDR: HTTP Proxy's IP (不变的话就容易判断了,呵呵)
HTTP_VIA: HTTP Proxy's IP or HTTP Proxy' ServerName或HTTP协议版本号或HTTP Proxy版本信息(有什么办法呢,这可没有RFC定义的说,不同的厂商做出来的HTTP Proxy这个字段的东东是不一样的说)
HTTP_X_FORWARDED_FOR: HTTP Client(浏览器)所在机器的IP (Squid使用,ISA不支持此字段)
其实分析到这里,偶们的目的已经可以实现了。
只要发现某个HTTP请求头部带有HTTP_VIA或HTTP_X_FORWARDED_FOR,那么这个发起HTTP请求的IP必定是个HTTP Proxy。OK,知道IP就好办了,接下去的事情~~~罚款!!!
HTTP客户端(浏览器)通过HTTP Proxy来访问某个HTTP服务器的过程大概如下:
HTTP请求-> HTTP请求->
HTTP Client ------------------ HTTP Proxy (更改某些HTTP头部信息) ------------------- HTTP Server
<-HTTP应答 <-HTTP应答
HTTP Proxy基本上会做一个中间人的位置,以自己的身份向HTTP服务器发起请求,这个HTTP请求的主要内容来自HTTP Client发给HTTP Proxy的请求,但是某些细节可能会有改变,HTTP Proxy甚至会加一些信息进去(怎么样,是不是眼前一亮啊?这就是偶们的机会了)。
OK,确定我们的方向,只要发现某个HTTP请求中有HTTP Proxy加进去的信息,那么我们就可以判断某个IP是HTTP Proxy了,甚至可以判断出真正提交这个HTTP请求的非法用户的真实IP。
HTTP Proxy何其多啊,xxbin熟悉的只有Linux/UNIX下著名了squid和M$ ISA Server(原来的M$ Proxy)中带的HTTP Proxy,偶只能针对这两个HTTP Proxy来讨论,下面的方法,对其它的HTTP Proxy是否适应,偶没有条件测试不了。 而且下面所描述的协议的细节,并不是RFC中的规范,仅仅是针对某几个产品的一些特性。 (不过HTTP Proxy,这两大巨头是占了相当市场份额的,还算是有点代表性的说)
通常,HTTP Proxy会更改或者添加以下的HTTP请求变量:
REMOTE_ADDR HTTP_VIA HTTP_X_FORWARDED_FOR
当没有使用HTTP Proxy的时候,这几个变量的值应该如下:
REMOTE_ADDR: HTTP Client(浏览器)所在机器的IP HTTP_VIA: 无定义,也就是说不会在HTTP请求中出现 HTTP_X_FORWARDED_FOR: 无定义,同上
当你使用了普通配置的HTTP Proxy的时候,这几个变量就变成下面的样子了:
REMOTE_ADDR: HTTP Proxy's IP (不变的话就容易判断了,呵呵)
HTTP_VIA: HTTP Proxy's IP or HTTP Proxy' ServerName或HTTP协议版本号或HTTP Proxy版本信息(有什么办法呢,这可没有RFC定义的说,不同的厂商做出来的HTTP Proxy这个字段的东东是不一样的说)
HTTP_X_FORWARDED_FOR: HTTP Client(浏览器)所在机器的IP (Squid使用,ISA不支持此字段)
其实分析到这里,偶们的目的已经可以实现了。
只要发现某个HTTP请求头部带有HTTP_VIA或HTTP_X_FORWARDED_FOR,那么这个发起HTTP请求的IP必定是个HTTP Proxy。OK,知道IP就好办了,接下去的事情~~~罚款!!!
发表评论
- 浏览: 36246 次
- 性别:

- 来自: 天堂和地狱的中间

- 详细资料
搜索本博客
我的相册
烦人的老婆
共 1 张
共 1 张
最近加入圈子
链接
最新评论
-
几种基于HTTP协议的RPC性 ...
还问一个问题,不知道你测试的相关软件的版本都是多少呢?
-- by general -
几种基于HTTP协议的RPC性 ...
我想问一下,hessian的加密解决该如何完成呢? 我找了很多网上很多内容,都无 ...
-- by general -
mysql中存储过程
不知道,有没有遇到需要根据表名返回表记录总数的情况(在oracle,mssqls ...
-- by superherosk123 -
JSP页面缓存设置
引用[i][/i]引用 [img][/img][url][/url][fl ...
-- by intogether -
JSP自定义标签学习心得
thank you
-- by zhengbin917943






评论排行榜