通常,一般的浏览器(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请求变量:
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就好办了,接下去的事情~~~罚款!!!
分享到:
相关推荐
koa-proxy已转移到甲氧基 Koa代理中间件安装$ npm install koa-proxy -S用法当您请求,它将获取并返回。 var koa = require ( 'koa' ) ;var proxy = require ( 'koa-proxy' ) ;var app = koa ( ) ;app . use ( proxy...
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Connection "Upgrade"; proxy_http_version 1.1; proxy_method CONNECT; } } ``` 在这个配置中,Nginx监听8080端口,当接收到...
例如,在Nginx配置中,确保`proxy_set_header`指令正确无误,并且服务器配置没有阻止自定义Header的传递。 总之,理解PHP处理HTTP头的方式以及`$_SERVER`数组的工作原理,是解决PHP获取自定义Header问题的关键。在...
若要在向上游服务器转发请求时添加或修改请求头,我们需要使用`proxy_set_header`指令。这通常在Nginx作为反向代理时使用。 例如,假设我们想在请求头中添加一个名为`X-Api-Version`的字段,其值为`v1`,可以在...
'header' => "Authorization: Basic " . base64_encode('username:password'), ] ]); $response = file_get_contents('http://target.com', false, $context); ``` 在实际应用中,可能还需要处理网络错误、超时、...
前言 开发网关项目时,在请求时往请求头header中放入... proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_set_header X-Nginx-Proxy true; add_header Pro
休息代理 简单的休息代理 例子 <?...require_once __DIR__ .... use Symfony\Component\HttpFoundation\Request;...use RestProxy\RestProxy;...foreach($proxy->getHeaders() as $header) { header($header); } echo $p
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Real-IP $remote_addr; proxy_set_header Host $http_host; proxy_http_version 1.1; proxy_set_header Connection ""; ...
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; if ( $http_room = 'v2') { rewrite ^/testng/(.*)$ /$1 break; proxy_pass http://localhost:9002; } if ( $http_room != 'v2'){ rewrite ^...
proxy_set_header X-Real-IP $remote_addr; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_connect_module; } } } ``` 这里,`proxy_...
vertx-service-proxy 是 EventBus 代理生成。示例:// Assume database service is already deployed somewhere.... // Save some data in the database JsonObject message = new JsonObject(); ...
HTTP协议Header详解是html帮助格式的,方便查询, 通过HTTP协议RFC2616整理的, 目录: 头域定义 2 1 Accept 2 2 Accept-Charset 4 3 Accept-Encoding 5 4 Accept-Language 6 5 Accept-Range 7 6 Age 7 7 Allow 8 8 ...
proxy_set_header X-Real-IP $remote_addr; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_connect allow all; } } } ``` 在这个配置中...
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 配置 ngx_http_proxy_connect_module location / { if ($request_method = CONNECT) { proxy_pass http://$host:$proxy_port; break; } }...
proxy_set_header Connection "upgrade"; } ``` 上述配置将客户端的请求转发到 mnif.cn 域名的 8083 端口,实现 WebSocket + SSL 访问。 在配置完成后,需要重启 Nginx 服务,以便生效新的配置。 反向代理的作用...
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Forwarded-Host $host; proxy_cache my_cache; proxy_cache_key "$scheme$...
urllib2使用代理ip和改变header打开网页,proxy和headers。
# proxy_set_header X-Real-IP $remote_addr; # proxy_set_header X-Scheme $scheme; # proxy_pass http://192.168.2.37; #} location / { proxy...
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://localhost:8081; root /data/child/Activity; } location /huodong { proxy_next_upstream ...
proxy_set_header X-Forwarded-For $remote_addr; proxy_pass http://localhost:8080/zwh/; } } server { listen 80; server_name test1.zwh.com; location / { proxy_set_header Host $host; proxy_...