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請求變量:
[code]REMOTE_ADDR
HTTP_VIA
HTTP_X_FORWARDED_FOR[/code]

當[color=red]沒有使用HTTP Proxy[/color]的時候,這幾個變量的值應該如下:
[code]REMOTE_ADDR: HTTP Client(瀏覽器)所在機器的IP
HTTP_VIA: 無定義,也就是說不會在HTTP請求中出現
HTTP_X_FORWARDED_FOR: 無定義,同上[/code]

當你使用了普通[color=red]配置的HTTP Proxy的時候[/color],這幾個變量就變成下面的樣子了:
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 ([color=red]Squid使用,ISA不支持此字段)[/color]
其實分析到這裏,偶們的目的已經可以實現了。
只要發現某個HTTP請求頭部帶有HTTP_VIA或HTTP_X_FORWARDED_FOR,那麼這個發起HTTP請求的IP必定是個HTTP Proxy。OK,知道IP就好辦了,接下去的事情~~~罰款!!!
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章