windows服务器怎么反爬虫
手工识别和拒绝爬虫的访问
相当多的爬虫对网站会造成非常高的负载,因此识别爬虫的来源IP是很容易的事情。最简单的办法就是用netstat检查80端口的连接:
netstat-nt| grep youhostip:80| awk'{print$5}'| awk-F":"'{print$1}'| sort| uniq-c| sort-r-n
这行shell可以按照80端口连接数量对来源IP进行排序,这样可以直观的判断出来网页爬虫。一般来说爬虫的并发连接非常高。
如果使用lighttpd做Web
Server,那么就更简单了。lighttpd的mod_status提供了非常直观的并发连接的信息,包括每个连接的来源IP,访问的URL,连接状
态和连接时间等信息,只要检查那些处于handle-request状态的高并发IP就可以很快确定爬虫的来源IP了。
拒绝爬虫请求既可以通过内核防火墙来拒绝,也可以在web server拒绝,比方说用iptables拒绝:
iptables-A INPUT-i eth0-j DROP-p tcp--dport 80-s 84.80.46.0/24
直接封锁爬虫所在的C网段地址。这是因为一般爬虫都是运行在托管机房里面,可能在一个C段里面的多台服务器上面都有爬虫,而这个C段不可能是用户宽带上网,封锁C段可以很大程度上解决问题。
通过识别爬虫的User-Agent信息来拒绝爬虫
有很多爬虫并不会以很高的并发连接爬取,一般不容易暴露自己;有些爬虫的来源IP分布很广,很难简单的通过封锁IP段地址来解决问题;另外还有很多
各种各样的小爬虫,它们在尝试Google以外创新的搜索方式,每个爬虫每天爬取几万的网页,几十个爬虫加起来每天就能消耗掉上百万动态请求的资源,由于
每个小爬虫单独的爬取量都很低,所以你很难把它从每天海量的访问IP地址当中把它准确的挖出来。
这种情况下我们可以通过爬虫的User-Agent信息来识别。每个爬虫在爬取网页的时候,会声明自己的User-Agent信息,因此我们就可以
通过记录和分析User-Agent信息来挖掘和封锁爬虫。我们需要记录每个请求的User-Agent信息,对于Rails来说我们可以简单的在
app/controllers/application.rb里面添加一个全局的before_filter,来记录每个请求的User-Agent信
息:
logger.info"HTTP_USER_AGENT#{request.env["HTTP_USER_AGENT"]}"
然后统计每天的production.log,抽取User-Agent信息,找出访问量最大的那些User-Agent。要注意的是我们只关注那
些爬虫的User-Agent信息,而不是真正浏览器User-Agent,所以还要排除掉浏览器User-Agent,要做到这一点仅仅需要一行
shell:
grep HTTP_USER_AGENT production.log| grep-v-E'MSIE|Firefox|Chrome|Opera|Safari|Gecko'| sort| uniq-c| sort-r-n| head-n 100> bot.log
统计结果类似这样:
57335 HTTP_USER_AGENT Baiduspider+(+)
56639 HTTP_USER_AGENT Mozilla/5.0(compatible; Googlebot/2.1;+)
42610 HTTP_USER_AGENT Mediapartners-Google
19131 HTTP_USER_AGENT msnbot/2.0b(+)
从日志就可以直观的看出每个爬虫的请求次数。要根据User-Agent信息来封锁爬虫是件很容易的事情,lighttpd配置如下:
$HTTP["useragent"]=~"qihoobot|^Java|Commons-HttpClient|Wget|^PHP|Ruby|Python"{
url.rewrite=("^/(.*)"=>"/crawler.html")
}
使用这种方式来封锁爬虫虽然简单但是非常有效,除了封锁特定的爬虫,还可以封锁常用的编程语言和HTTP类库的User-Agent信息,这样就可以避免很多无谓的程序员用来练手的爬虫程序对网站的骚扰。
还有一种比较常见的情况,就是某个搜索引擎的爬虫对网站爬取频率过高,但是搜索引擎给网站带来了很多流量,我们并不希望简单的封锁爬虫,仅仅是希望降低爬虫的请求频率,减轻爬虫对网站造成的负载,那么我们可以这样做:
$HTTP["user-agent"]=~"Baiduspider+"{
connection.delay-seconds= 10
}
对百度的爬虫请求延迟10秒钟再进行处理,这样就可以有效降低爬虫对网站的负载了。
通过网站流量统计系统和日志分析来识别爬虫
有些爬虫喜欢修改User-Agent信息来伪装自己,把自己伪装成一个真实浏览器的User-Agent信息,让你无法有效的识别。这种情况下我们可以通过网站流量系统记录的真实用户访问IP来进行识别。
主流的网站流量统计系统不外乎两种实现策略:一种策略是在网页里面嵌入一段js,这段js会向特定的统计服务器发送请求的方式记录访问量;另一种策
略是直接分析服务器日志,来统计网站访问量。在理想的情况下,嵌入js的方式统计的网站流量应该高于分析服务器日志,这是因为用户浏览器会有缓存,不一定
每次真实用户访问都会触发服务器的处理。但实际情况是,分析服务器日志得到的网站访问量远远高于嵌入js方式,极端情况下,甚至要高出10倍以上。
现在很多网站喜欢采用awstats来分析服务器日志,来计算网站的访问量,但是当他们一旦采用Google
Analytics来统计网站流量的时候,却发现GA统计的流量远远低于awstats,为什么GA和awstats统计会有这么大差异呢?罪魁祸首就是
把自己伪装成浏览器的网络爬虫。这种情况下awstats无法有效的识别了,所以awstats的统计数据会虚高。
其实作为一个网站来说,如果希望了解自己的网站真实访问量,希望精确了解网站每个频道的访问量和访问用户,应该用页面里面嵌入js的方式来开发自己
的网站流量统计系统。自己做一个网站流量统计系统是件很简单的事情,写段服务器程序响应客户段js的请求,分析和识别请求然后写日志的同时做后台的异步统
计就搞定了。
通过流量统计系统得到的用户IP基本是真实的用户访问,因为一般情况下爬虫是无法执行网页里面的js代码片段的。所以我们可以拿流量统计系统记录的
IP和服务器程序日志记录的IP地址进行比较,如果服务器日志里面某个IP发起了大量的请求,在流量统计系统里面却根本找不到,或者即使找得到,可访问量
却只有寥寥几个,那么无疑就是一个网络爬虫。
分析服务器日志统计访问最多的IP地址段一行shell就可以了:
grep Processing production.log| awk'{print$4}'| awk-F'.''{print$1"."$2"."$3".0"}'| sort| uniq-c| sort-r-n| head-n 200> stat_ip.log
然后把统计结果和流量统计系统记录的IP地址进行对比,排除真实用户访问IP,再排除我们希望放行的网页爬虫,比方Google,百度,微软msn爬虫等等。最后的分析结果就就得到了爬虫的IP地址了。以下代码段是个简单的实现示意:
whitelist=[]
IO.foreach("#{RAILS_ROOT}/lib/whitelist.txt"){|line| whitelist<< line.split[0].strip if line}
realiplist=[]
IO.foreach("#{RAILS_ROOT}/log/visit_ip.log"){|line| realiplist<< line.strip if line}
iplist=[]
IO.foreach("#{RAILS_ROOT}/log/stat_ip.log") do|line|
ip= line.split[1].strip
iplist<< ip if line.split[0].to_i> 3000&&!whitelist.include?(ip)&&!realiplist.include?(ip)
end
Report.deliver_crawler(iplist)
分析服务器日志里面请求次数超过3000次的IP地址段,排除白名单地址和真实访问IP地址,最后得到的就是爬虫IP了,然后可以发送邮件通知管理员进行相应的处理。
网站的实时反爬虫防火墙实现策略
通过分析日志的方式来识别网页爬虫不是一个实时的反爬虫策略。如果一个爬虫非要针对你的网站进行处心积虑的爬取,那么他可能会采用分布式爬取策略,
比方说寻找几百上千个国外的代理服务器疯狂的爬取你的网站,从而导致网站无法访问,那么你再分析日志是不可能及时解决问题的。所以必须采取实时反爬虫策
略,要能够动态的实时识别和封锁爬虫的访问。
要自己编写一个这样的实时反爬虫系统其实也很简单。比方说我们可以用memcached来做访问计数器,记录每个IP的访问频度,在单位时间之内,
如果访问频率超过一个阀值,我们就认为这个IP很可能有问题,那么我们就可以返回一个验证码页面,要求用户填写验证码。如果是爬虫的话,当然不可能填写验
证码,所以就被拒掉了,这样很简单就解决了爬虫问题。
用memcache记录每个IP访问计数,单位时间内超过阀值就让用户填写验证码,用Rails编写的示例代码如下:
ip_counter= Rails.cache.increment(request.remote_ip)
if!ip_counter
Rails.cache.write(request.remote_ip, 1,:expires_in=> 30.minutes)
elsif ip_counter> 2000
render:template=>'test',:status=> 401 and return false
end
这段程序只是最简单的示例,实际的代码实现我们还会添加很多判断,比方说我们可能要排除白名单IP地址段,要允许特定的User-Agent通过,要针对登录用户和非登录用户,针对有无referer地址采取不同的阀值和计数加速器等等。
此外如果分布式爬虫爬取频率过高的话,过期就允许爬虫再次访问还是会对服务器造成很大的压力,因此我们可以添加一条策略:针对要求用户填写验证码的
IP地址,如果该IP地址短时间内继续不停的请求,则判断为爬虫,加入黑名单,后续请求全部拒绝掉。为此,示例代码可以改进一下:
before_filter:ip_firewall,:except=>:test
def ip_firewall
render:file=>"#{RAILS_ROOT}/public/403.html",:status=> 403 if BlackList.include?(ip_sec)
end
我们可以定义一个全局的过滤器,对所有请求进行过滤,出现在黑名单的IP地址一律拒绝。对非黑名单的IP地址再进行计数和统计:
ip_counter= Rails.cache.increment(request.remote_ip)
if!ip_counter
Rails.cache.write(request.remote_ip, 1,:expires_in=> 30.minutes)
elsif ip_counter> 2000
crawler_counter= Rails.cache.increment("crawler/#{request.remote_ip}")
if!crawler_counter
Rails.cache.write("crawler/#{request.remote_ip}", 1,:expires_in=> 10.minutes)
elsif crawler_counter> 50
BlackList.add(ip_sec)
render:file=>"#{RAILS_ROOT}/public/403.html",:status=> 403 and return false
end
render:template=>'test',:status=> 401 and return false
end
如果某个IP地址单位时间内访问频率超过阀值,再增加一个计数器,跟踪他会不会立刻填写验证码,如果他不填写验证码,在短时间内还是高频率访问,就
把这个IP地址段加入黑名单,除非用户填写验证码激活,否则所有请求全部拒绝。这样我们就可以通过在程序里面维护黑名单的方式来动态的跟踪爬虫的情况,甚
至我们可以自己写个后台来手工管理黑名单列表,了解网站爬虫的情况。
关于这个通用反爬虫的功能,我们开发一个开源的插件:
这个策略已经比较智能了,但是还不够好!我们还可以继续改进:
1、用网站流量统计系统来改进实时反爬虫系统
还记得吗?网站流量统计系统记录的IP地址是真实用户访问IP,所以我们在网站流量统计系统里面也去操作memcached,但是这次不是增加计数
值,而是减少计数值。在网站流量统计系统里面每接收到一个IP请求,就相应的cache.decrement(key)。所以对于真实用户的IP来说,它
的计数值总是加1然后就减1,不可能很高。这样我们就可以大大降低判断爬虫的阀值,可以更加快速准确的识别和拒绝掉爬虫。
2、用时间窗口来改进实时反爬虫系统
爬虫爬取网页的频率都是比较固定的,不像人去访问网页,中间的间隔时间比较无规则,所以我们可以给每个IP地址建立一个时间窗口,记录IP地址最近
12次访问时间,每记录一次就滑动一次窗口,比较最近访问时间和当前时间,如果间隔时间很长判断不是爬虫,清除时间窗口,如果间隔不长,就回溯计算指定时
间段的访问频率,如果访问频率超过阀值,就转向验证码页面让用户填写验证码。
最终这个实时反爬虫系统就相当完善了,它可以很快的识别并且自动封锁爬虫的访问,保护网站的正常访问。不过有些爬虫可能相当狡猾,它也许会通过大量
的爬虫测试来试探出来你的访问阀值,以低于阀值的爬取速度抓取你的网页,因此我们还需要辅助第3种办法,用日志来做后期的分析和识别,就算爬虫爬的再慢,
它累计一天的爬取量也会超过你的阀值被你日志分析程序识别出来。
自建speedtest测速服务器教程,Linux/Windows/群晖
您可以在VPS上搭建speedtest测速网站以测试VPS的带宽,或在内网中搭建speedtest测试内网带宽。本文将介绍如何在Linux、Windows和群晖上搭建speedtest服务器。
高性价比和便宜的VPS/云服务器推荐: blog.zeruns.tech/archiv...
什么是speedtest
speedtest主要使用HTML和JavaScript,通过客户端浏览器上传和下载垃圾数据来测试HTTP传输速度,与常用的speedtest.net相似。speedtest可以使用任何操作系统上的任何Web服务器作为服务端,理论上支持Windows/MacOS/Linux/Unix等系统,IIS/Nginx/Apache/lighttpd等服务器。任意浏览器作为客户端,如Chrome/Firefox/IE11/Edge/Safari/Opera。speedtest默认使用PHP作为服务端,目前也有node.js版本,也可以仅使用纯静态服务器。
Linux方案一:docker
输入上述命令安装speedtest测速服务后,在浏览器地址栏输入http://服务器IP:8080即可打开测速页面。
方案二:宝塔
按照这篇文章的环境搭建好web环境: blog.zeruns.tech/archiv...
下载speedtest源码:
创建网站并将刚刚下载的speedtest源码上传到网站目录,然后访问您的网站地址即可。
Windows
通过远程桌面连接到自己的服务器,然后下载安装宝塔面板: bt.cn/?...
安装好后会显示面板地址和账号密码,复制到浏览器打开。
然后按照下图选择安装套件
接着添加网站,域名那里填自己的域名,如果没有域名可以直接填IP
接着下载speedtest源码然后上传到服务器:
然后直接访问域名或服务器IP即可打开测速页面。
群晖
首先下载speedtest并上传到群晖,speedtest下载: 将speedtest包中的文件上传到群晖共享文件夹的某个目录,如下图
从套件中心找到并安装Web Station和PHP 7.0
打开Web Station套件,选择PHP设置,编辑默认PHP配件文件。勾选openssl
选择虚拟主机,点击新增,然后按下图配置虚拟主机。其中端口和文档根目录按实际情况设置
安装完成后,浏览器打开群晖IP加你自己设置的端口即可打开测速页面。
linux下phpstudy怎么安装php环境变量
linux下phpstudy环境的安装
phpStudy Linux版&Win版同步上线支持Apache/Nginx/Tengine/Lighttpd/IIS7/8/6
phpStudy for Linux支持Apache/Nginx/Tengine/Lighttpd,
支持php5.2/5.3/5.4/5.5切换
已经在centos-6.5,debian-7.4.,ubuntu-13.10测试成功。
下载版:http//lamp.phpstudy.net/phpstudy.bin
完整版:http//lamp.phpstudy.net/phpstudy-all.bin
安装:
wget-c http//lamp.phpstudy.net/phpstudy.bin
chmod+x phpstudy.bin#权限设置
./phpstudy.bin#运行安装
用时十到几十分钟不等,安装时间取决于电脑的下载速度和配置。
也可以事先下载好完整,安装时无需下载。
安装完成
如何切换php版:
假如你先安装的apache+php5.3
想切换成nginx+php5.4
你就再走一次./phpstudy.bin
但是你会发现有一行是否安装mysql提示选不安装
这样只需要编译nginx+php5.4
从而节省时间,这样只需要几分钟即可。
项目地址:
使用说明:
服务进程管理:phpstudy(start|stop|restart|uninstall)
站点主机管理:phpstudy(add|del|list)
ftpd用户管理:phpstudy ftp(add|del|list)
=phpstudy WIN版下载==================
『软件简介』
该程序包集成最新的Apache+Nginx+LightTPD+PHP+MySQL+phpMyAdmin+Zend Optimizer+Zend Loader,一次性安装,无须配置即可使用,是非常方便、好用的PHP调试环境。该程序绿色小巧简易迷你仅有35M,有专门的控制面板。总之学习PHP只需一个包。
对学习PHP的新手来说,WINDOWS下环境配置是一件很困难的事;对老手来说也是一件烦琐的事。因此无论你是新手还是老手,该程序包都是一个不错的选择。
1、全面适合 Win2000/XP/2003/win7/win8/win2008操作系统,支持Apache、IIS、Nginx和LightTPD。
2、该程序包集成以下软件,括号内为phpstudy下对应的目录。
php 5.6a3(php56n)
php 5.5.10(php55)
php 5.5.10-nts(php55n)
php 5.4.26(php54)
php 5.4.26-nts(php54n)
php 5.3.28(php53)
php 5.3.28-nts(php53n)
php 5.2.17(php52)
Apache 2.4.7(Apache)
Nginx 1.5.11(nginx)
LightTPD 1.4.32(Lighttpd)
MySQL 5.5.36(MySQL)
MySQL-Front 5.3(SQL-Front)
phpMyAdmin 3.5.8.2(phpMyAdmin)
pear 1.9.4(pear)
OpenSSL 1.0.1e&0.9.8y
ZendOptimizer 3.3.3(php5.2有)
Zend Loader 5.5.0(php5.3有)
Zend Loader 6.0.0(php5.4有)
wincache 1.3.5(fastcgi有)
php_opcache 7.0.3(ZendOpcache扩展)
xdebug 2.2.3.1
Zend Debugger 6.2(php5.3/4 fastcgi有)
xcache 3.1.0
eAccelerator 1.0&0.9.6
php_sqlsrv(MSSQL扩展)
php_pdo_sqlsrv(PDO-MSSQL扩展)
php_mongo 1.4.5(MongoDB扩展)
php_dbase 5.1.0(dbase扩展)
php_dbx 1.1.2(dbx扩展)
php_ibm_db2 1.9.5(ibm_db2扩展)
php_apc 3.1.13(php_apc扩展)
php_memcache 3.0.8
phpStudy Ftp server(FTPServ)
SendMail 3.2(sendmail)
VC++ 2008运行库
3、MySQL数据库默认用户名:root,密码root,安装后请重新设置密码。
4、本程序纯绿色,支持22种组合一键切换,支持系统服务和非服务两种启动方式,自由切换。改变安装路径或拷贝到别的电脑上也可正常运行;即便是运行完再更改路径也能运行,真正做到无须配置。重写控制面板更加有效直观地进行控制程序的启停。
5、自带FTP服务器,支持多用户,无需再安装FTP服务器。自带网站挂马监视器,随时记录文件的修改情况,让挂马文件无处可逃。
6、本程序完美支持II7,IIS8和IIS6。应网友的要求制作Nginx版和Lighttpd版。Nginx版为phpfind,Lighttpd版为phpLight。
推荐:学习JSP用JspStudy。
『软件简介』
JspStudy集成JDK+tomcat+Apache+mysql,JSP环境配置一键启动。无需修改任何配置即可迅速搭建支持JSP的服务器运行环境。
纯绿色解压即可,支持系统服务和非服务两种启动方式,自由切换。控制面板更加有效直观地进行控制程序的启停。
JspStudy将复杂的JSP环境配置简单化。
『特别注意』
1.为了减少出错安装路径不得有汉字,如有防火墙开启,会提示是否信任httpd、mysqld运行,请选择全部允许。
2.此为apache+php方案,需要Nginx+php方案的请到www.phpStudy.net下载phpfind,Lighttpd+PHP方案下载phpLight。
3.重装系统后或相关服务丢失时,只需要点一下『运行模式-应用』即可。
4.可通过菜单『卸载相关服务』进行卸载相关服务。
5.在『启动』、『停止』、『重启』三个启停按钮上右键可以有选择地进行启停,左键将控制全部的启停。
6.菜单『phpStudy设置』可以进行php,apche,mysql的相关设置。菜单『站点域名设置』可以进行站点及域名的添加。
7.本程序分为安装版和非安装版,无论是安装还是免安装,最后的效果完全一致。
8.端口问题无法启动时,请使用菜单『环境端口检测』进行端口检测,尝试启动。
26种组合一键切换apache+php
php扩展管理超级方便
nginx+php
IIS7/8/6+php
mysql备份还原导入导出
站点域名设置
端口检测
博客不再更新,请到官方网站下载:
下载地址解压版:
下载地址安装版:
其他版本:
软件简单说明各版本的区别大小下载
phpStudy26种组合,超全大合集Apache+Nginx+LightTPD+IIS
php5.2 php5.3 php5.4 php5.5 php5.6
MySQL phpMyAdmin MySQL-Front
26种组合自由切换,是下面5个版本的合集
同时支持apache/nginx/Lighttpd和IIS7/8/636M解压版
安装版
phpStudy
Lite
新手用,经典wamp组合Apache+php5.3+php5.4+MySQL(wamp集成包)
没有上面合集复杂的多版本设置,简单适合新手。16M解压版
phpStudy
for IIS
IIS服务器专用IIS+php5.2+php5.3+php 5.4+MySQL
php一键安装包 for IIS7/8/6(IIS服务器专用)21M解压版
phpStudy
for Linux
Linux服务器专用(lamp)Apache+Nginx+LightTPD+MySQL
php5.2+php5.3+php5.4+php5.5一键安装包
支持centos,ubuntu,debian等Linux系统,12种组合80M安装版
phpfindnginx+php组合(wnmp)Nginx+php5.3+php5.4+MySQL(wnmp集成包)
nginx+php组合,适合喜欢用nginx的朋友16M解压版
phpLightlighttpd+php组合(wlmp)Lighttpd+php5.3+php5.5+MySQL(wlmp集成包)17M解压版
phpStudy
(php5.2)
apache+php5.2珍藏版Apache2.2+php5.2.17+MySQL5.1
php5.2经典组合值得收藏,仅有11M,无需运行库11M解压版
JspStudyJSP环境一键安装包JDK+tomcat+Apache+mysql+php
纯绿色解压即可,不添加环境变量,不修改注册表52M解压版
下载地址:
php5.3+php5.4合集下载: http//www.phpstudy.net/phpstudy/phpStudy.zip