本發(fā)明涉及代理服務(wù)領(lǐng)域,具體涉及一種基于HTTP協(xié)議的代理掃描方法。
背景技術(shù):
代理服務(wù)可以通過緩存技術(shù)提高瀏覽速度,也可以用于隱藏真實(shí)IP實(shí)現(xiàn)匿名訪問。也有一些人使用代理突破一些網(wǎng)絡(luò)訪問限制,或者網(wǎng)站的防爬蟲限制,甚至用于DDOS攻擊。通過對(duì)一些常用端口的代理探測(cè),可以識(shí)別出開放的代理服務(wù),避免一些惡意請(qǐng)求。
Nmap是一款用于網(wǎng)絡(luò)發(fā)現(xiàn)和安全審計(jì)的網(wǎng)絡(luò)工具,軟件名稱Nmap是Network Mapper的簡(jiǎn)稱。Nmap可以檢測(cè)主機(jī)是否在線、端口開放情況、偵測(cè)運(yùn)行的服務(wù)類型及版本信息、偵測(cè)操作系統(tǒng)類型與設(shè)備類型信息。Nmap在技術(shù)實(shí)現(xiàn)上是:向端口發(fā)送特定的數(shù)據(jù)包,如向80端口發(fā)送HTTP數(shù)據(jù)包,收到目的端口返回包后,將返回包和Nmap的指紋規(guī)則匹配,如果滿足某個(gè)規(guī)則,則可以證明該端口開放著規(guī)則對(duì)應(yīng)的服務(wù)。
現(xiàn)有的代理掃描方法類似Nmap的服務(wù)識(shí)別,需要編寫大量的代理識(shí)別規(guī)則,然后通過端口探測(cè)的形式識(shí)別代理服務(wù)。這種代理掃描方法的缺點(diǎn)很明顯:一是被探測(cè)的端口可以隨意修改返回?cái)?shù)據(jù)包,來躲避被識(shí)別;二是因?yàn)橐?guī)則數(shù)量有限,通過正則規(guī)則識(shí)別代理服務(wù)數(shù)據(jù)質(zhì)量不高,會(huì)存在誤識(shí)別的現(xiàn)象;三是無法檢測(cè)代理服務(wù)是否是匿名代理。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明所要解決的技術(shù)問題是提供一種基于HTTP協(xié)議的代理掃描方法,通過搭建特殊的代理請(qǐng)求目的端,識(shí)別代理是否匿名;通過對(duì)代理返回頁(yè)面的哈希比對(duì),識(shí)別代理服務(wù)器是否篡改網(wǎng)頁(yè)。
為解決上述技術(shù)問題,本發(fā)明采用的技術(shù)方案是:
一種基于HTTP協(xié)議的代理掃描方法,包括以下步驟:
步驟1:搭建一個(gè)只有一個(gè)頁(yè)面的Web服務(wù),計(jì)算這個(gè)Web頁(yè)面的哈希值;
步驟2:步驟1的Web服務(wù)需要來記錄請(qǐng)求IP、X-Forwarded-For,用于識(shí)別代理是否匿名;
步驟3:對(duì)一段IP的特定端口,生成目的地址為所述Web服務(wù)的代理請(qǐng)求,如果請(qǐng)求成功,則所述IP和端口為代理服務(wù);
步驟4:計(jì)算代理請(qǐng)求返回頁(yè)面的哈希值,與搭建的Web頁(yè)面的哈希值比較,若哈希值不一致,則說明代理服務(wù)篡改了Web頁(yè)面。
進(jìn)一步的,所述特定端口為80端口。
與現(xiàn)有技術(shù)相比,本發(fā)明的有益效果是:1、掃描代理時(shí)直接指定掃描IP和端口,掃描范圍更廣。2、通過自定義Web服務(wù)日志格式,識(shí)別出代理服務(wù)器,以及代理服務(wù)是否匿名。3、通過服務(wù)端頁(yè)面和代理請(qǐng)求返回頁(yè)面的哈希對(duì)比,識(shí)別出代理服務(wù)是否篡改頁(yè)面內(nèi)容。
具體實(shí)施方式
下面通過具體實(shí)施例對(duì)本發(fā)明方法進(jìn)行進(jìn)一步說明。
1、Web服務(wù)端
通過安裝一個(gè)Nginx來實(shí)現(xiàn)一個(gè)簡(jiǎn)單的Web服務(wù),然后配置日志記錄如下數(shù)據(jù):
1)http_x_forwarded_for,如果是透明代理,這里會(huì)記錄真實(shí)的代理請(qǐng)求客戶端地址;
2)remote_addr,請(qǐng)求web服務(wù)的地址,如果通過代理,則這里是代理服務(wù)器的地址;
3)request,客戶端請(qǐng)求的具體URL;
客戶端在請(qǐng)求Web服務(wù)時(shí),需要在URL中附帶客戶端IP,以及代理IP和端口,假如3.3.3.3是我們掃描客戶端IP,8.8.8.8是代理服務(wù)的IP,80是代理服務(wù)的端口,那請(qǐng)求的URL后綴為:/proxy?myip=3.3.3.3&proxy=http:8.8.8.8:80。這個(gè)URL后綴會(huì)記錄在我們搭建的WEB服務(wù)的request變量中。
如果web服務(wù)日志中http_x_forwarded_for的值和remote_addr的值不同,且http_x_forwarded_for的值和request中的myip相同,那得出這個(gè)代理是透明代理,代理地址及是request變量中的proxy。
如果web服務(wù)日志中http_x_forwarded_for的值為空,且remote_addr的值和request變量中的proxy變量相同,則說明該代理服務(wù)為匿名代理,代理地址為request中的proxy。
2、掃描客戶端
在掃描客戶端,假如要掃描的代理地址為8.8.8.8,代理端口為80,掃描客戶的的IP為3.3.3.3,代理請(qǐng)求目的段的IP為1.1.1.1。這里以GO語言作為示例,代理請(qǐng)求的代碼如下:
c:=new(http.Client)
req:=request.NewRequest(c)
req.Proxy=“http://8.8.8.8:80”
resp,err:=req.Get(“http://1.1.1.1/proxy?myip=3.3.3.3&proxy=http:8.8.8.8:80”)
resp_hash:=hash(resp)
其中req.Proxy指定的是代理地址為代理地址,使用這個(gè)代理地址向我們搭建的Web服務(wù)端發(fā)送一個(gè)HTTP的Get請(qǐng)求。resp_hash為我們計(jì)算的返回結(jié)果哈希值,這個(gè)哈希值通過和服務(wù)端計(jì)算的頁(yè)面哈希值比較,可以識(shí)別代理是否篡改網(wǎng)站內(nèi)容。