博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python练习:日志监控
阅读量:5936 次
发布时间:2019-06-19

本文共 1244 字,大约阅读时间需要 4 分钟。

需求:1. 每分钟监控服务器日志,每分钟请求超过200次,加入黑名单编写思路1. 读文件,获取每行的内容 open readlinesxx.2x.x.x - - [04/Jun/2018:03:44:13 +0800]2. 找到IP地址,按照空格分割字符串,取第一个元素 split3. 把IP存到字典里面,每个IP出现一次,IP次数就加1{'ip1':1,'ip2':2,'ip3':1}['1xx.xx.xx.xx','xxx.xx0.xx.xx','xx.xx.xx.xx']4. 判断IP次数是否大于200,加入黑名单
import time  # 引入time模块point = 0  # 存放的是文件初始的位置,如果不写,会提示point未定义,因为代码是从上往下读取的,第一次并未读取到point,所以我们需要先定义point的初始值while True: # 写一个死循环,因为文件是一直在读取中的,60秒重新读取一次    with open('abc.txt', encoding='utf-8') as f:  # 打开日志文件        f.seek(point)  # 再次打开文件时,获取文件指针的位置        ip_info = {}  # 定义一个空字典,存放ip和他出现的次数        for line in f:  # 循环日志文件每行内容            ip = line.split()[0]  # 我们需要找到ip,文件内是以空格分割的,所以我们只需要默认split就可以,然后我们找到ip,下标为0的元素        # 到这一步的时候,我们就可以将文件内的ip全部找出,可以使用print(ip)来查看一下是否实现此功能。            if ip in ip_info:  # 我们需要判断一下ip是否在字典中                ip_info[ip] += 1   # ip在字典中,我们就给它在原来的值里+1            else:                ip_info[ip] = 1  # ip如果不在字典中,ip的次数就等于1        print(ip_info)        point = f.tell()  # 循环结束后,tell()表示获取当前指针的位置        for k in ip_info:  # 循环ip_info每一行数据            if ip_info.get(k) >= 200:  # 判断如果ip_info[k]的值大于等于100次                print('该ip正在攻击你!%s' % k)  # 输出    time.sleep(60)   # 停止60秒,等60秒之后再继续运行

 

转载于:https://www.cnblogs.com/blueteer/p/10031891.html

你可能感兴趣的文章
11.2---字符串数组排序,删除变位词(CC150)
查看>>
IIS启动网站
查看>>
SQL Server 的 6 种隔离级别
查看>>
EnumDescription
查看>>
css3之calc()
查看>>
Search a 2D Matrix II
查看>>
Linux-FTP
查看>>
php写日志函数
查看>>
开源性能测试工具Locust使用篇(二)
查看>>
开源 CMS系统 / SNS系统 / BBS系统
查看>>
LeetCode--007--整数反转(java)
查看>>
K - Ignatius and the Princess IV
查看>>
Latex学习(标题,子标题)
查看>>
matlab练习程序(最大流/最小割)
查看>>
CentOS安装中文支持
查看>>
Java内部类详解
查看>>
(document).height()与$(window).height()
查看>>
Spring Boot|监控-Actuator
查看>>
java读取txt字符串挨个写入int数组
查看>>
RabbitMQ广播:fanout模式
查看>>