linux curl命令来路伪装(referer)和浏览器伪装(user-agent)


Warning: Use of undefined constant g_prettify_esc_callback - assumed 'g_prettify_esc_callback' (this will throw an Error in a future version of PHP) in /home/wwwroot/dbci/wp-content/plugins/g-prettify/prettify.php on line 19

 一般的知名站点,都有一套比较完善的机器流量检测系统;它通过流量的IP、流量的来源、使用的浏览设备、访问频次、用户行为等综合分析,来判断当前流量是真实的用户流量,还是机器在爬网站的数据,从而做出是否封禁当前流量的决定。第三方统计站点,也是使用此原理来帮助站长统计用户行文的。
  而其中的流量来源、使用的浏览设备、甚至流量的IP都是可以伪造的。本文为介绍curl伪装访问来源、和伪装使用的浏览器的方法。伪装来路IP地址,请参考“linux curl命令使用代理服务器”。

一、原理说明:
  浏览器与http服务器是通过http协议通讯的,而http请求头中包含了客户端的一些信息,其中包括:浏览器类型、当前页面的来源页面,cookies等;
  下面我们来看看一个标准的http请求头后响应头:

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文件:

<?php
print_r($_SERVER);

测试返回:

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”参数方式:
# 告诉http服务器,我是从qq.com来的

[[email protected] ~]# curl -e http://qq.com  http://db.ci/test.php 2>/dev/null|grep HTTP_REFERER
    [HTTP_REFERER] => http://qq.com
 
# 告诉http服务器,我是从baidu.com搜"aiezu"关键词点进来的
[[email protected] ~]# curl --referer https://www.baidu.com/s?wd=dbci  http://db.ci/test.php 2>/dev/null|grep HTTP_REFERER
    [HTTP_REFERER] => https://www.baidu.com/s?wd=dbci

2、“-H”参数的方式:
# 告诉http服务器,我是从微博过来的

[[email protected] ~]# curl -H "Referer: http://weibo.com"  http://db.ci/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”参数方式:
# 告诉http服务器,我是通过微信内置浏览器访问

[[email protected] ~]# 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';
[[email protected] ~]# curl -A "$UA" http://db.ci/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浏览器访问
[[email protected] ~]# UA='Mozilla/5.0 (Windows NT 6.2; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1667.0 Safari/537.36';
[[email protected] ~]# curl --user-agent "$UA" http://db.ci/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”参数方式:
# 告诉网站,我是百度蜘蛛爬取

[[email protected] ~]# UA="Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)";
[[email protected] ~]# curl -H "User-Agent: $UA" http://db.ci/a.php|grep HTTP_USER_AGENT
    [HTTP_USER_AGENT] => Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)
点赞