监控日志被攻击情况-小练习

需求

1、监控日志文件,记录攻击次数较多的IP

分析
#1、打开日志文件;
#2、把IP地址拿出来;
#3、判断每个IP出现的次数,如果大于50次,加入黑名单

其它知识点

#文件名柄,文件对象都是指执行open后打开的对象
#f.readline()#一行一行的读,节省内存资源;
#f.read()#如果用read来读是一次性把文件的所有内容读进内存,如果文件特别大,内存资源又小的情况下,有可能把内存撑爆;
#直接循环1个文件对象,每次循环的是文件的每一行,循环什么时候循环结束了代表文件内容就读完了;for line in f:
#日志读取为1分钟读取一次,可以用time.sleep(60)方法;
#由于每次读取日志时都是从第一行开始读取,但实际操作中应该是接着从上次读取的位置开始读取;可以使用f.tell方法,获取当前指针位置;
#想取一个值大于等于几的次数:循环列表取值,列表中这个值出现的次数用all_ips.count(ip)>50;
import time
point=0 #每次记录指针的位置
while True:
    all_ips = []
    f = open('access.log', encoding='utf-8')
    f.seek(point)
    for line in f:
        ip = line.split()[0]
        all_ips.append(ip)
    point=f.tell()
    all_ip_set = set(all_ips)
    for ip in all_ip_set:
        if all_ips.count(ip) > 50:
            print('加入黑名单的IP是%s'%ip)
    time.sleep(60)#暂停60S
import time

ip_lis=[]
point=0
while True:
    with open('access.log', encoding='utf-8') as f:
        f.seek(point)
        for line in f:
            ip = line.split()[0]
            ip_lis.append(ip)
        point = f.tell()
        ip_lis_set = set(ip_lis)
        for i in ip_lis_set:
            if ip_lis.count(i) >= 50:
                print('加入黑名单的IP有:%s' % i)
        time.sleep(60)
原文地址:https://www.cnblogs.com/ruijie/p/10207617.html