有時出于個人隱私的原因,我們希望隱藏自己的IP,讓http服務器無法記錄我們訪問過它,這時我們可以使用代理服務器。
代理服務器(Proxy Server)是工作在瀏覽器與http服務器之間的一個服務應用,所有經過代理服務器的http請求,都會被轉發到對應的http服務器上。
當然,除了http可以使用代理外,https、ftp、RTSP、pop3等協議同樣可以使用代理訪問,不過本文介紹的是支持http、https協議訪問的代理。
一、代理服務器分類:
我們比較常用、支持http(s)協議代理主要分為兩大類:http代理和socks代理,見下表:
?
大類 | 小類 | 子類 | 描述 |
---|---|---|---|
http代理 |
http代理 https代理 |
透明代理 | http服務器知道瀏覽器端使用了代理,并能獲取瀏覽器端原始IP; |
匿名代理 | http服務器知道瀏覽器端使用了代理,但無法獲取瀏覽器端原始IP; | ||
高匿名代理 | http服務器不知道瀏覽器端使用了代理,且無法獲取瀏覽器端原始IP; | ||
SOCKS代理 | SOCKS4 |
被稱為全能代 理,支持http 和其他協議 |
只支持TCP應用; |
SOCKS4A | 支持TCP應用;支持服務器端域名解析; | ||
SOCKS5 |
支持TCP和UDP應用;支持服務器端域名解析; 支持多種身份驗證;支持IPV6; |
?
linux curl命令可以使用下面參數設置http(s)代理、socks代理,已經設置它們的用戶名、密碼以及認證方式:
?
參數 | 用法 |
---|---|
-x host:port -x [protocol://[user:pwd@]host[:port] --proxy [protocol://[user:pwd@]host[:port] |
使用HTTP代理訪問;如果未指定端口,默認使用8080端口; protocol默認為http_proxy,其他可能的值包括: http_proxy、HTTPS_PROXY、socks4、socks4a、socks5; 如: --proxy 8.8.8.8:8080; -x "http_proxy://aiezu:123@aiezu.com:80" |
--socks4 --socks4a --socks5 |
使用SOCKS4代理; 使用SOCKS4A代理; 使用SOCKS5代理; 此參數會覆蓋“-x”參數; |
--proxy-anyauth --proxy-basic --proxy-diges --proxy-negotiate --proxy-ntlm |
代理認證方式,參考: --anyauth --basic --diges --negotiate --ntlm |
-U --proxy-user |
設置代理的用戶名和密碼; |
?
三、Linux curl命令設置代理舉例:
1、linux curl命令設置http代理:
?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
# 指定http代理IP和端口 curl -x 113.185.19.192:80 http://aiezu.com/test.php curl --proxy 113.185.19.192:80 http://aiezu.com/test.php #指定為http代理 curl -x http_proxy://113.185.19.192:80 http://aiezu.com/test.php #指定為https代理 curl -x HTTPS_PROXY://113.185.19.192:80 http://aiezu.com/test.php #指定代理用戶名和密碼,basic認證方式 curl -x aiezu:123456@113.185.19.192:80 http://aiezu.com/test.php curl -x 113.185.19.192:80 -U aiezu:123456 http://aiezu.com/test.php curl -x 113.185.19.192:80 --proxy-user aiezu:123456 http://aiezu.com/test.php #指定代理用戶名和密碼,ntlm認證方式 curl -x 113.185.19.192:80 -U aiezu:123456 --proxy-ntlm http://aiezu.com/test.php #指定代理協議、用戶名和密碼,basic認證方式 curl -x http_proxy://aiezu:123456@113.185.19.192:80 http://aiezu.com/test.php |
?
2、Linux curl命令設置socks代理:
?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
#使用socks4代理,無需認證方式 curl --socks4 122.192.32.76:7280 http://aiezu.com/test.php curl -x socks4://122.192.32.76:7280 http://aiezu.com/test.php #使用socks4a代理,無需認證方式 curl --socks4a 122.192.32.76:7280 http://aiezu.com/test.php curl -x socks4a://122.192.32.76:7280 http://aiezu.com/test.php #使用socks5代理,basic認證方式 curl --socks5 122.192.32.76:7280 -U aiezu:123456 http://aiezu.com/test.php curl -x socks5://aiezu:123456@122.192.32.76:7280 http://aiezu.com/test.php #使用socks5代理,basic認證方式,ntlm認證方式 curl -x socks5://aiezu:123456@122.192.32.76:7280 --proxy-ntlm http://aiezu.com/test.php |
?
四、測試代理的隱匿度:
1、測試前準備:
測試前,我們先在網站根目錄也一個php頁面“test.php”,用于輸出http服務器接收到的訪客IP地址信息,"test.php"測試頁的代碼如下:
?
1 2 3 4 5 6 7 8 9 |
$array?=?array('HTTP_USER_AGENT',?'HTTP_HOST',?'HTTP_ACCEPT',?'PATH',?'SERVER_SIGNATURE',?'SERVER_SOFTWARE',?'SERVER_NAME',?'SERVER_ADDR',?'SERVER_PORT',?'DOCUMENT_ROOT',?'SERVER_ADMIN',?'SCRIPT_FILENAME',?'REMOTE_PORT',?'GATEWAY_INTERFACE',?'SERVER_PROTOCOL',?'REQUEST_METHOD',?'QUERY_STRING',?'REQUEST_URI',?'SCRIPT_NAME',?'PHP_SELF',?'REQUEST_TIME'); //? 將 $_SERVER 數組賦予 $srv數組; $srv?=?$_SERVER; // 釋放掉 $srv中不相關的鍵 foreach($array?as?$name?) { ????unset($srv[?$name?]); } print_r($srv); |
?
保存好"test.php"后,然后我們通過不用代理,和使用透明代理、匿名代理、高匿名代理、SOCKS分別去訪問,看頁面輸出的內容結果。
2、測試使用不同代理輸出結果:
①. ?通過linux curl不使用代理訪問:
?
?
[root@aiezu.com ~]# curl http://aiezu.com/test.php Array ( [REMOTE_ADDR] => 114.112.104.126 )
?
?
可以看出,http服務器獲取到的"REMOTE_ADDR"IP地址為"114.112.104.126",此IP地址就是客戶端lcurl的真實IP地址。?
②. 通過linux curl命令使用http透明代理訪問:
?
?
[root@aiezu.com ~]# curl -x 37.139.9.11:80 http://aiezu.com/test.php Array ( [HTTP_VIA] => 1.1 ThunderVPN (squid/3.3.8) [HTTP_X_FORWARDED_FOR] => 114.112.104.126 [HTTP_CACHE_CONTROL] => max-age=259200 [HTTP_CONNECTION] => keep-alive [REMOTE_ADDR] => 37.139.9.11 )
?
?
可以看出REMOTE_ADDR字段變成了代理服務器的IP地址,同時真實IP地址也能從HTTP_X_FORWARDED_FOR字段獲取到,還多了一個“HTTP_VIA”字段,可以看出出代理并不能隱藏真實IP,而且也會讓http服務器自動瀏覽器端使用了代理。
③.?通過linux curl命令使用http匿名代理訪問:
?
?
[root@aiezu.com ~]# curl -x 60.21.209.114:8080 http://aiezu.com/test.php Array ( [HTTP_PROXY_CONNECTION] => Keep-Alive [REMOTE_ADDR] => 60.21.209.114 )
?
?
從上面可以看出,REMOTE_ADDR字段變成了代理服務器的IP地址,而且在響應不包含原來的真實IP地址,但是多了HTTP_PROXY_CONNECTION,能判斷出使用了代理,得出結論此瀏覽器客戶端使用了匿名代理。
④.?通過linux curl命令使用http高匿名代理訪問:
?
?
[root@aiezu.com ~]# curl -x 114.232.1.13:8088 http://aiezu.com/test.php Array ( [REMOTE_ADDR] => 114.232.1.13 )
?
?
這次我們驚奇的發現,REMOTE_ADDR同樣變成了代理的IP地址,同時不留下任何殘留證據證明使用了代理,可以得出結論,這就是傳說中的高匿名代理。
④.?通過linux curl命令使用socks5代理訪問:
?
?
[root@aiezu.com ~]# curl --socks5 122.192.32.76:7280 http://aiezu.com/test.php Array ( [REMOTE_ADDR] => 180.96.54.198 )
?
?
可以看出此SOCKS5代理也是高匿名代理。
審核編輯:黃飛
?
評論
查看更多