数据挖掘是什么?
数据挖掘是从大量的、不完全的、有噪声的、模糊的、随机的数据中提取隐含在其中的、人们事先不知道的、但又是潜在有用的信息和知识的过程。
数据挖掘流程:
定义问题:清晰地定义出业务问题,确定数据挖掘的目的。
数据准备:数据准备包括:选择数据–在大型数据库和数据仓库目标中 提取数据挖掘的目标数据集;数据预处理–进行数据再加工,包括检查数据的完整性及数据的一致性、去噪声,填补丢失的域,删除无效数据等。
数据挖掘:根据数据功能的类型和和数据的特点选择相应的算法,在净化和转换过的数据集上进行数据挖掘。
结果分析:对数据挖掘的结果进行解释和评价,转换成为能够最终被用户理解的知识。
数据挖掘的技术,可粗分为:统计方法、机器学习方法、神经网络方法和数据库方法。统计方法,可细分为:回归分析(多元回归、自回归等)、判别分析(贝叶斯判别、CBR、遗传算法、贝叶斯信念网络等。神经网络方法,可细分为:前向神经网络(BP算法等)、自组织神经网络(自组织特征映射、竞争学习等)等。数据库方法主要是基于可视化的多维数据分析或OLAP方法,另外还有面向属性的归纳方法。
如果公司用的是交换机分配网络的话,就很容易查得到,包括你上过上面网站,去过哪些子网页都可以查得到。解决办法:
1、找代理服务器上网,这个时候被记录下来的就是代理服务器的上网记录了,而不是你的,黑客技术中叫做找肉鸡,有时需要找多个肉鸡多级代理来增加被查询和跟踪的难度,来逃避被记录和查到;这个属于被动逃避;
2、攻击服务器相应服务,更改服务器记录日志或者数据库数据,或者让监控进程死掉,这样也能不被记录,这个属于主动攻击;注意:两个都需要一定的计算机网络知识,甚至是黑客技能才能做到,并且需要使用一定的工具软件才能完成,最好自己不要尝试,作为知识面了解即可。附:而且不同操作系统有不同方法,同种操作系统不同版本也有不同方法,这个不是短时间内能掌握的技术。
手工识别和拒绝爬虫的访问
相当多的爬虫对网站会造成非常高的负载,因此识别爬虫的来源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 8480460/24
直接封锁爬虫所在的C网段地址。这是因为一般爬虫都是运行在托管机房里面,可能在一个C段里面的多台服务器上面都有爬虫,而这个C段不可能是用户宽带上网,封锁C段可以很大程度上解决问题。
通过识别爬虫的User-Agent信息来拒绝爬虫
有很多爬虫并不会以很高的并发连接爬取,一般不容易暴露自己;有些爬虫的来源IP分布很广,很难简单的通过封锁IP段地址来解决问题;另外还有很多
各种各样的小爬虫,它们在尝试Google以外创新的搜索方式,每个爬虫每天爬取几万的网页,几十个爬虫加起来每天就能消耗掉上百万动态请求的资源,由于
每个小爬虫单独的爬取量都很低,所以你很难把它从每天海量的访问IP地址当中把它准确的挖出来。
这种情况下我们可以通过爬虫的User-Agent信息来识别。每个爬虫在爬取网页的时候,会声明自己的User-Agent信息,因此我们就可以
通过记录和分析User-Agent信息来挖掘和封锁爬虫。我们需要记录每个请求的User-Agent信息,对于Rails来说我们可以简单的在
app/controllers/applicationrb里面添加一个全局的before_filter,来记录每个请求的User-Agent信
息:
loggerinfo "HTTP_USER_AGENT #{requestenv["HTTP_USER_AGENT"]}"
然后统计每天的productionlog,抽取User-Agent信息,找出访问量最大的那些User-Agent。要注意的是我们只关注那
些爬虫的User-Agent信息,而不是真正浏览器User-Agent,所以还要排除掉浏览器User-Agent,要做到这一点仅仅需要一行
shell:
grep HTTP_USER_AGENT productionlog | grep -v -E 'MSIE|Firefox|Chrome|Opera|Safari|Gecko' | sort | uniq -c | sort -r -n | head -n 100 > botlog
统计结果类似这样:
57335 HTTP_USER_AGENT Baiduspider+(+http://wwwbaiducom/search/spiderhtm)
56639 HTTP_USER_AGENT Mozilla/50 (compatible; Googlebot/21; +http://wwwgooglecom/bothtml)
42610 HTTP_USER_AGENT Mediapartners-Google
19131 HTTP_USER_AGENT msnbot/20b (+http://searchmsncom/msnbothtm)
从日志就可以直观的看出每个爬虫的请求次数。要根据User-Agent信息来封锁爬虫是件很容易的事情,lighttpd配置如下:
$HTTP["useragent"] =~ "qihoobot|^Java|Commons-HttpClient|Wget|^PHP|Ruby|Python" {
urlrewrite = ( "^/()" => "/crawlerhtml" )
}
使用这种方式来封锁爬虫虽然简单但是非常有效,除了封锁特定的爬虫,还可以封锁常用的编程语言和HTTP类库的User-Agent信息,这样就可以避免很多无谓的程序员用来练手的爬虫程序对网站的骚扰。
还有一种比较常见的情况,就是某个搜索引擎的爬虫对网站爬取频率过高,但是搜索引擎给网站带来了很多流量,我们并不希望简单的封锁爬虫,仅仅是希望降低爬虫的请求频率,减轻爬虫对网站造成的负载,那么我们可以这样做:
$HTTP["user-agent"] =~ "Baiduspider+" {
connectiondelay-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 productionlog | awk '{print $4}' | awk -F'' '{print $1""$2""$3"0"}' | sort | uniq -c | sort -r -n | head -n 200 > stat_iplog
然后把统计结果和流量统计系统记录的IP地址进行对比,排除真实用户访问IP,再排除我们希望放行的网页爬虫,比方Google,百度,微软msn爬虫等等。最后的分析结果就就得到了爬虫的IP地址了。以下代码段是个简单的实现示意:
whitelist = []
IOforeach("#{RAILS_ROOT}/lib/whitelisttxt") { |line| whitelist << linesplit[0]strip if line }
realiplist = []
IOforeach("#{RAILS_ROOT}/log/visit_iplog") { |line| realiplist << linestrip if line }
iplist = []
IOforeach("#{RAILS_ROOT}/log/stat_iplog") do |line|
ip = linesplit[1]strip
iplist << ip if linesplit[0]to_i > 3000 && !whitelistinclude(ip) && !realiplistinclude(ip)
end
Reportdeliver_crawler(iplist)
分析服务器日志里面请求次数超过3000次的IP地址段,排除白名单地址和真实访问IP地址,最后得到的就是爬虫IP了,然后可以发送邮件通知管理员进行相应的处理。
网站的实时反爬虫防火墙实现策略
通过分析日志的方式来识别网页爬虫不是一个实时的反爬虫策略。如果一个爬虫非要针对你的网站进行处心积虑的爬取,那么他可能会采用分布式爬取策略,
比方说寻找几百上千个国外的代理服务器疯狂的爬取你的网站,从而导致网站无法访问,那么你再分析日志是不可能及时解决问题的。所以必须采取实时反爬虫策
略,要能够动态的实时识别和封锁爬虫的访问。
要自己编写一个这样的实时反爬虫系统其实也很简单。比方说我们可以用memcached来做访问计数器,记录每个IP的访问频度,在单位时间之内,
如果访问频率超过一个阀值,我们就认为这个IP很可能有问题,那么我们就可以返回一个验证码页面,要求用户填写验证码。如果是爬虫的话,当然不可能填写验
证码,所以就被拒掉了,这样很简单就解决了爬虫问题。
用memcache记录每个IP访问计数,单位时间内超过阀值就让用户填写验证码,用Rails编写的示例代码如下:
ip_counter = Railscacheincrement(requestremote_ip)
if !ip_counter
Railscachewrite(requestremote_ip, 1, :expires_in => 30minutes)
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/403html", :status => 403 if BlackListinclude(ip_sec)
end
我们可以定义一个全局的过滤器,对所有请求进行过滤,出现在黑名单的IP地址一律拒绝。对非黑名单的IP地址再进行计数和统计:
ip_counter = Railscacheincrement(requestremote_ip)
if !ip_counter
Railscachewrite(requestremote_ip, 1, :expires_in => 30minutes)
elsif ip_counter > 2000
crawler_counter = Railscacheincrement("crawler/#{requestremote_ip}")
if !crawler_counter
Railscachewrite("crawler/#{requestremote_ip}", 1, :expires_in => 10minutes)
elsif crawler_counter > 50
BlackListadd(ip_sec)
render :file => "#{RAILS_ROOT}/public/403html", :status => 403 and return false
end
render :template => 'test', :status => 401 and return false
end
如果某个IP地址单位时间内访问频率超过阀值,再增加一个计数器,跟踪他会不会立刻填写验证码,如果他不填写验证码,在短时间内还是高频率访问,就
把这个IP地址段加入黑名单,除非用户填写验证码激活,否则所有请求全部拒绝。这样我们就可以通过在程序里面维护黑名单的方式来动态的跟踪爬虫的情况,甚
至我们可以自己写个后台来手工管理黑名单列表,了解网站爬虫的情况。
关于这个通用反爬虫的功能,我们开发一个开源的插件:https://githubcom/csdn-dev/limiter
这个策略已经比较智能了,但是还不够好!我们还可以继续改进:
1、用网站流量统计系统来改进实时反爬虫系统
还记得吗?网站流量统计系统记录的IP地址是真实用户访问IP,所以我们在网站流量统计系统里面也去操作memcached,但是这次不是增加计数
值,而是减少计数值。在网站流量统计系统里面每接收到一个IP请求,就相应的cachedecrement(key)。所以对于真实用户的IP来说,它
的计数值总是加1然后就减1,不可能很高。这样我们就可以大大降低判断爬虫的阀值,可以更加快速准确的识别和拒绝掉爬虫。
2、用时间窗口来改进实时反爬虫系统
爬虫爬取网页的频率都是比较固定的,不像人去访问网页,中间的间隔时间比较无规则,所以我们可以给每个IP地址建立一个时间窗口,记录IP地址最近
12次访问时间,每记录一次就滑动一次窗口,比较最近访问时间和当前时间,如果间隔时间很长判断不是爬虫,清除时间窗口,如果间隔不长,就回溯计算指定时
间段的访问频率,如果访问频率超过阀值,就转向验证码页面让用户填写验证码。
最终这个实时反爬虫系统就相当完善了,它可以很快的识别并且自动封锁爬虫的访问,保护网站的正常访问。不过有些爬虫可能相当狡猾,它也许会通过大量
的爬虫测试来试探出来你的访问阀值,以低于阀值的爬取速度抓取你的网页,因此我们还需要辅助第3种办法,用日志来做后期的分析和识别,就算爬虫爬的再慢,
它累计一天的爬取量也会超过你的阀值被你日志分析程序识别出来。
不可以。
具体见解如下:
公司一般使用的都是上网行为管理器,只能针对你手机联网情况进行查看,可以查询你登录什么网站,上什么APP,上多长时间。但是说什么是看不到的。所以是无法查看你的手机聊天记录的。
当然,还有种情况就是如果你的公司叫腾讯公司,微信就属于腾讯公司的业务,所以从后台服务器上腾讯公司是可以看到你们的聊天记录的 。
NAF系列是一款IN-line模式的硬件设备,以DPI(Deep Packet Inspect 深度包检测)技术为核心,支持硬件Bypass,除提供基于七层应用的带宽管理和应用优化功能之外,也在7层应用程式/IM/P2P阻挡、过滤、管控、记录提供优势的Web接口管理,以用户、时间、位置、通讯协议、内容格式进行管控或浏览;
在带宽管理方面,配合用户自定义的带宽策略以及核心带宽自动分配算法,可以为网络链路划分多个虚拟带宽通道,能够实现最大带宽限制、保证带宽、带宽租借、应用优先级等一系列带宽管理功能,保证关键应用带宽,限制非业务应用带宽,改善和保障了整体网络应用的服务质量。
上网管理器的发明为公司的各方面都有很大的提升,首先在公司的关闭方面更加的简单便捷,而且在这种网络的监管下公司员工的工作效率也有了很大的提升,这就为公司创造更多的利润。
1A记录:用来指定主机名(或域名)对应的IP地址记录。
2MX记录:邮件交换记录。
3NS记录:域名服务器记录。
4CNAME记录:别名记录,也被称为规范名字。
域名解析就是域名到IP地址的转换过程。域名的解析工作由DNS服务器完成。
A (Address) 记录:是用来指定主机名(或域名)对应的IP地址记录。用户可以将该域名下的网站服务器指向到自己的网页服务器(web server)上。同时也可以设置域名的子域名。
2MX记录:邮件交换记录。它指向一个邮件服务器,用于电子邮件系统发邮件时根据收信人的地址后缀来定位邮件服务器。
MX记录也叫做邮件路由记录,用户可以将该域名下的邮件服务器指向到自己的mail server上,然后即可自行操控所有的邮箱设置。
3NS记录:是域名服务器记录。用来指定该域名由哪个DNS服务器来进行解析。
每个注册的域名都是由一个DNS域名服务器来进行解析的,DNS服务器NS记录地址一般以以下的形式出现:ns1domain com、ns2domain com等。
4CNAME记录:别名记录,也被称为规范名字。这种记录允许您将多个名字映射到同一台计算机。通常用于同时提供WWW和MAIL服务的计算机。
它同时提供WWW和MAIL服务,为了便于用户访问服务。可以为该计算机设置两个别名(CNAME):WWW和MAIL。 这两个别名的全称就是www开头的域名和以mail开头的域名。
数据挖掘系统的其它应用还有:
♦ 在对客户进行分析方面:银行信用卡和保险行业,利用数据挖掘将市场分
成有意义的群组和部门,从而协助市场经理和业务执行人员更好地集中于
有促进作用的活动和设计新的市场运动。
♦ 在客户关系管理方面: 数据挖掘能找出产品使用模式或协助了解客户行为,
从而可以改进通道管理 (如银行分支和6等) 。 又如正确时间销售就是基于顾客生活周期模型来实施的。
♦ 在零售业方面:数据挖掘用于顾客购货篮的分析可以协助货架布置,促销活动时间,促销商品组合以及了解滞销和畅销商品状况等商业活动。通过
对一种厂家商品在各连锁店的市场共享分析,客户统计以及历史状况的分
析,可以确定销售和广告业务的有效性。
♦ 在产品质量保证方面:数据挖掘协助管理大数量变量之间的相互作用,并
能自动发现出某些不正常的数据分布,揭示制造和装配操作过程中变化情
况和各种因素,从而协助质量工程师很快地注意到问题发生范围和采取改
正措施。
♦ 在远程通讯方面:基于数据挖掘的分析协助组织策略变更以适应外部世界
的变化,确定市场变化模式以指导销售计划。在网络容量利用方面,数据
挖掘能提供对客户聚集服务使用的结构和模式的了解,从而指导容量计划
人员对网络设施作出最佳投资决策。
♦ 在各个企事业部门,数据挖掘在假伪检测及险灾评估、失误回避、资源分
配、市场销售预测广告投资等很多方面,起着很重要作用。例如在化学及
制药行业,将数据挖掘用于巨量生物信息可以发现新的有用化学成分;在遥感领域针对每天从卫星上及其它方面来的巨额数据,对气象预报、臭氧
层监测等能起很大作用。
0条评论