python分析nginx根据每日请求量自动屏蔽

#!/usr/local/python/bin/python
# -*- coding: utf-8 -*-
import sys,time,commands,linecache
import subprocess
from urlparse import urlparse
from tailf import tailf
import shutil,struct,socket

ip_max_count = 100

def str2int(str):
    uint = socket.ntohl(struct.unpack("I",socket.inet_aton(str))[0])
    return struct.unpack("i", struct.pack('I', uint))[0]
cur_ip_cache = {}
commands.getstatusoutput("/home/nginx/sbin/nginx -s reload")
time.sleep(5)
fh=open('/home/nginx/conf/v42_zhaoren_deny.conf.python','r')
for  line in  fh.readlines():
        if line[0:4] == "deny":
                ip_temp = line.split(' ')[1][0:-2].strip().lstrip()
                cur_ip_cache[ip_temp] = ip_max_count+1
fh.close()

log_file = "/home/nginx/logs/access.cn.log"
for line in tailf(log_file):
        parse_info = line.split(' ')
        ip_address = parse_info[0].strip()
        log_time = parse_info[1]+parse_info[2]
        if not cur_ip_cache.has_key(ip_address):
                cur_ip_cache[ip_address] = 1
        else:
                #print cur_ip_cache[ip_address]
                if cur_ip_cache[ip_address] < ip_max_count:
                        cur_ip_cache[ip_address] += 1
                if cur_ip_cache[ip_address] == ip_max_count:
                        f=open('zhaoren.log','a')
                        f.write(log_time+"\t\t"+ip_address+"\n")
                        f.close()
                        f=open('/home/nginx/conf/access_deny.conf.python','a')
                        f.write("deny \t"+ip_address+";\n")
                        f.close()
                        shutil.copyfile("/home/nginx/conf/access_deny.conf.python", "/home/nginx/conf/access_deny.conf")
                        #temp = commands.getstatusoutput("/home/nginx/sbin/nginx -s reload")


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值