通过统计nginx访问日志禁止恶意抓取数据的实现
2014-09-25 18:02
751 查看
nginx默认会记录客户端访问服务端的日志,默认的目录位于:/var/logs/access.log;
业务需求:每小时读取access.log内容,统计每个ipd访问系统次数,如果超过指定次数,则将该ip加入到防火墙中,以便禁止其继续访问(后续可以考虑不是禁止其访问服务,而是重定向到指定的页面)。这样避免别人恶意从自己网站上抓取数据
也可一去我的个人站点
查看
或者,欢迎关注俺的微信订阅号,每天一篇小笔记,每天提高一点点:
公众好:enilu123
业务需求:每小时读取access.log内容,统计每个ipd访问系统次数,如果超过指定次数,则将该ip加入到防火墙中,以便禁止其继续访问(后续可以考虑不是禁止其访问服务,而是重定向到指定的页面)。这样避免别人恶意从自己网站上抓取数据
#-*-coding:utf8 -*- import logging,datetime,os,sys,string,re reload(sys) sys.setdefaultencoding('utf8') logging.basicConfig(level=logging.DEBUG, \ format='%(asctime)s %(levelname)s- %(message)s', \ filename='/data/analyse.log', \ datefmt='%m-%d %H:%M', \ ) #单位时间内允许最大有效访问次数 maxallowednum=500 ipDic={} pip = re.compile('[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}') ptime = re.compile('[0-9]{1,2}:[0-9]{1,2}:[0-9]{1,2}') logfilepath = '/var/log/nginx/access.log' #该文件记录上次访问到的日志行数 tmpfilepath ='/data/tmp' linenum = string.atoi(open(tmpfilepath,'r').read()) #读取文件总行数,如果总行数小于tmp文件中记录的行数,说明该日志文件微新增的日志文件,则需要从第一行开始读取 loglinenum = len(open(logfilepath,'rU').readlines()) if(loglinenum<linenum): linenum = 1 logging.debug('linenum is:%s',linenum) logfile = open(logfilepath,'r') tmpfile = open(tmpfilepath,'w') index = 0 line = logfile.readline() while(line!=''): if(index>=linenum): #print line mip = pip.search(line) #mtime = ptime.search(line) if mip: ip = mip.group() #将每个ip的有效请求存放在ipDic字典中 if(line.find('/static/')==-1): if(ipDic.has_key(ip)): ipDic[ip] = ipDic[ip]+1 else: ipDic[ip] = 1 #times = mtime.group() #logging.debug('%s' %(ip)) line=logfile.readline() index+=1 logging.debug('new line num:%i'%(index)) tmpfile.write(str(index)) tmpfile.close() logfile.close() #循环ip字典,将其中访问次数超过最大允许访问次数的ip加入到防火墙,禁止其继续访问 for k,v in ipDic.items(): if(v>=maxallowednum): logging.debug('ip:%s visited %i times,add to iptables' %(k,v)) os.system('iptables -I INPUT 1 -s '+k+' -j DROP') else: logging.debug('ip:%s visited %i times' %(k,v)) logging.debug('-------------------------over------------------------------')
也可一去我的个人站点
查看
或者,欢迎关注俺的微信订阅号,每天一篇小笔记,每天提高一点点:
公众好:enilu123
相关文章推荐
- 禁止通过ip直接访问网站来防止恶意解析-(apache,nginx,iis)
- 采用ngxtop实现nginx实时访问数据统计
- PHP统计nginx访问日志中的搜索引擎抓取404链接页面路径
- PHP统计nginx访问日志中的搜索引擎抓取404链接页面路径
- 使用PHP实现蜘蛛访问日志统计
- 使用PHP实现蜘蛛访问日志统计
- 海量日志数据提取某日访问百度次数最多的那个IP的Java实现
- 使用ADO操作SQL SERVER 通过'OLE DB 访问 ACCESS 数据库 ,实现数据交换
- 海量日志数据提取出访问次数最多的那个IP python实现 总结
- 海量日志数据提取出访问次数最多的那个IP python实现 总结
- Nginx禁止通过IP,未绑定域名访问服务器
- Nginx配置禁止通过IP访问
- 设置nginx禁止通过IP访问服务器的方法
- nginx 禁止通过IP,未绑定域名访问服务器
- Nginx禁止通过IP,未绑定域名访问服务器
- 通过nginx实现内网hadoop集群对外访问web界面
- 防恶意解析,禁止用IP访问网站的Apache设置 修改 httpd.conf 实现
- nginx 统计日志访问ip个数
- linux小命令大世界2---统计Apache或Nginx访问日志里的独立IP访问数
- 海量日志数据,提取出某日访问百度次数最多的那个IP的C++实现源代码