有时出于个人隐私的原因,我们希望隐藏自己的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命令代理设置参数:
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:[email protected]:80"
|
--socks4 <host[:port]>
--socks4a <host[:port]>
--socks5 <host[:port]>
|
使用SOCKS4代理;
使用SOCKS4A代理;
使用SOCKS5代理;
此参数会覆盖“-x”参数;
|
--proxy-anyauth
--proxy-basic
--proxy-diges
--proxy-negotiate
--proxy-ntlm
|
代理认证方式,参考:
--anyauth
--basic
--diges
--negotiate
--ntlm
|
-U <user:password>
--proxy-user <user:password>
|
设置代理的用户名和密码;
|
三、Linux curl命令设置代理举例:
1、linux curl命令设置http代理:
# 指定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:[email protected]: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:[email protected]:80 http://aiezu.com/test.php
2、Linux curl命令设置socks代理:
#使用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:[email protected]:7280 http://aiezu.com/test.php
#使用socks5代理,basic认证方式,ntlm认证方式
curl -x socks5://aiezu:[email protected]:7280 --proxy-ntlm http://aiezu.com/test.php
四、测试代理的隐匿度:
1、测试前准备:
测试前,我们先在网站根目录也一个php页面“
test.php
”,用于输出http服务器接收到的访客IP地址信息,"test.php"测试页的代码如下:
<?php
$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不使用代理访问:
[[email protected] ~]# 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透明代理
访问:
[[email protected] ~]# 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匿名代理
访问:
[[email protected] ~]# 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高匿名
代理访问:
[[email protected] ~]# 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
代理访问:
[[email protected] ~]# curl --socks5 122.192.32.76:7280 http://aiezu.com/test.php
Array
[REMOTE_ADDR] => 180.96.54.198
)
可以看出此SOCKS5代理也是高匿名代理。
五、附录:
有时出于个人隐私的原因,我们希望隐藏自己的IP,让http服务器无法记录我们访问过它,这时我们可以使用代理服务器。 代理服务器(Proxy Server)是工作在浏览器与http服务器之间的一个服务应用,所有经过代理服务器的http请求,都会被转发到对...