一般的知名站点,都有一套比较完善的机器流量检测系统;它通过流量的IP、流量的来源、使用的浏览设备、访问频次、用户行为等综合分析,来判断当前流量是真实的用户流量,还是机器在爬网站的数据,从而做出是否封禁当前流量的决定。第三方统计站点,也是使用此原理来帮助站长统计用户行文的。 而其中的流量来源、使用的浏览设备、甚至流量的IP都是可以伪造的。本文为介绍curl伪装访问来源、和伪装使用的浏览器的方法。伪装来路IP地址,请参考“linux curl命令使用代理服务器”。
一、原理说明:
浏览器与http服务器是通过http协议通讯的,而http请求头中包含了客户端的一些信息,其中包括:浏览器类型、当前页面的来源页面,cookies等; 下面我们来看看一个标准的http请求头后响应头:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
[root@aiezu.com ~]
# curl -v -I --referer http://baidu.com --user-agent 'Chrome/54.0 (Windows NT 10.0)' http://baidu.com/
* About to connect() to baidu.com port 80 (
#0)
* Trying 180.149.132.47...
* Connected to baidu.com (180.149.132.47) port 80 (
#0)
> HEAD / HTTP
/1
.1
> User-Agent: Chrome
/54
.0 (Windows NT 10.0)
> Host: baidu.com
> Accept: */*
> Referer: http:
//baidu
.com
>
< HTTP
/1
.1 302 Moved Temporarily
HTTP
/1
.1 302 Moved Temporarily
< Server: bfe
/1
.0.8.18
Server: bfe
/1
.0.8.18
< Date: Fri, 02 Dec 2016 03:46:11 GMT
Date: Fri, 02 Dec 2016 03:46:11 GMT
< Content-Type: text
/html
Content-Type: text
/html
< Content-Length: 161
Content-Length: 161
< Connection: Keep-Alive
Connection: Keep-Alive
< Location: https:
//www
.baidu.com/
Location: https:
//www
.baidu.com/
< Expires: Sat, 03 Dec 2016 03:46:11 GMT
Expires: Sat, 03 Dec 2016 03:46:11 GMT
< Cache-Control: max-age=86400
Cache-Control: max-age=86400
< Cache-Control: private
Cache-Control: private
<
* Connection
#0 to host baidu.com left intact
上面输出可以看到,第7行和第9行就是我们设置的浏览器类型字符串和流量来源页面。而httpd服务端接收到了什么呢?我们这里以http服务段使用的是PHP为例,在站点上做一个“test.php”做为测试页面,PHP的Referer、User-Agent存放在$_SERVER变量中,所以我们的“test.php”文件只需要两行代码: test.php文件:
1
2
<?php
print_r($_SERVER);
测试返回:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
[root@aiezu tmp]# curl --referer http://baidu.com --user-agent 'Chrome/54.0 (Windows NT 10.0)' http://aiezu.com/test.php
Array
(
[HTTP_USER_AGENT] => Chrome/54.0 (Windows NT 10.0)
[HTTP_HOST] => aiezu.com
[HTTP_ACCEPT] => */*
[HTTP_REFERER] => http://baidu.com
[PATH] => /sbin:/usr/sbin:/bin:/usr/bin
...
[REQUEST_METHOD] => GET
...
[PHP_SELF] => /test.php
[REQUEST_TIME] => 1480651125
)
二、伪装来路(referer):
什么是来路?从A页面点击进入B页面,那B页面的来路就是A页面的URL。伪装来路十分简单,有两种方法:1、使用上面的“--referer”参数或“-e参数”;2、直接使用“-H”参数设置http头,下面分别介绍两种方法。 1、“-e/--referer”参数方式:
1
2
3
4
5
6
7
# 告诉http服务器,我是从qq.com来的
[root@aiezu.com ~]
# curl -e http://qq.com http://aiezu.com/test.php 2>/dev/null|grep HTTP_REFERER
[HTTP_REFERER] => http:
//qq
.com
# 告诉http服务器,我是从baidu.com搜"aiezu"关键词点进来的
[root@aiezu.com ~]
# curl --referer https://www.baidu.com/s?wd=aiezu http://aiezu.com/test.php 2>/dev/null|grep HTTP_REFERER
[HTTP_REFERER] => https:
//www
.baidu.com
/s
?wd=aiezu
2、“-H”参数的方式:
1
2
3
# 告诉http服务器,我是从微博过来的
[root@aiezu ~]
# curl -H "Referer: http://weibo.com" http://aiezu.com/test.php 2>/dev/null|grep HTTP_REFERER
[HTTP_REFERER] => http:
//weibo
.com
三、伪装浏览器类型(User-Agent):
首先,我们先找到浏览器对应的“User-Agent”字符串。可以直接在Chrome中的“开发者工具”的“网络”标签查看http请求头获得;也可以在网上搜索获得,如通过百度搜索“微信useragent”、“ie useragent”、“chrome useragent”等。 获得对应浏览器的“User-Agent”字符串后,同样可以通过两种方式告诉http服务器我用的浏览器类型: 1、“-A/--user-agent”参数方式:
1
2
3
4
5
6
7
8
9
# 告诉http服务器,我是通过微信内置浏览器访问
[root@aiezu.com ~]
# UA='Mozilla/5.0 (iPhone; CPU iPhone OS 8_0 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Mobile/12A365 MicroMessenger/6.0 NetType/WIFI';
[root@aiezu.com ~]
# curl -A "$UA" http://aiezu.com/test.php|grep HTTP_USER_AGENT
[HTTP_USER_AGENT] => Mozilla
/5
.0 (iPhone; CPU iPhone OS 8_0 like Mac OS X) AppleWebKit
/600
.1.4 (KHTML, like Gecko) Mobile
/12A365
MicroMessenger
/6
.0 NetType
/WIFI
# 告诉http服务器,我是通过Chrome浏览器访问
[root@aiezu.com ~]
# UA='Mozilla/5.0 (Windows NT 6.2; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1667.0 Safari/537.36';
[root@aiezu.com ~]
# curl --user-agent "$UA" http://aiezu.com/test.php|grep HTTP_USER_AGENT
[HTTP_USER_AGENT] => Mozilla
/5
.0 (Windows NT 6.2; Win64; x64) AppleWebKit
/537
.36 (KHTML, like Gecko) Chrome
/32
.0.1667.0 Safari
/537
.36
2、“-H”参数方式:
1
2
3
4
# 告诉网站,我是百度蜘蛛爬取
[root@aiezu.com ~]
# UA="Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)";
[root@aiezu.com ~]
# curl -H "User-Agent: $UA" http://aiezu.com/a.php|grep HTTP_USER_AGENT
[HTTP_USER_AGENT] => Mozilla
/5
.0 (compatible; Baiduspider
/2
.0; +http:
//www
.baidu.com
/search/spider
.html)
四、附录:
参考页面: