# 如果同一个ip地址60s之内访问超过200次,那么就把这个ip地址加入黑名单
# 需求分析
# 1、60s读一次文件
# 2、分割,取到第一个元素,ip地址
# 3、把所有的ip都放在一个list里面,如果ip超过200次,加入黑名单
# 4、因为日志文件是追加的,所以循环的话会把之前查到的ip在查出来,循环完会指针在末尾,所以需要记住指针位置,point = f.tell()
# import time
# point = 0
# while True:
# ips = []
# with open('access.log','a+',encoding='utf-8') as f:
# f.seek(0)
# for line in f:
# ip = line.split()[0]#split 默认是空格分割
# ips.append(ip)
# if ips.count(ip)>199:
# print('%s已经加入黑名单!'%ip)
# point =f.tell()
# time.sleep(60)
#用集合来去重
import time
point = 0
while True:
ips = [] #存放所有的IP地址的list
blk_set = set()#存放需要加入黑名单的ip
with open('access.log','a+',encoding='utf-8') as f:
f.seek(0)
for line in f:
ip = line.split()[0]#split 默认是空格分割
ips.append(ip)
if ips.count(ip)>199:
blk_set.add(ip)
for ip in blk_set:# 这个for循环的目的是,防止ip重复加入黑名单,因为集合是去重的。
print('%s已经加入黑名单!' % ip)
point =f.tell()
time.sleep(60)