读取日志文件,并判断IP次数>200的加入黑名单

import timepoint=0 #第一次开始读取时从0开始while True:  #服务器一直再运行所以写个死循环    ips={}#定义一个空字典存放IP用,放在循环下边是因为每次读取时都会重新定义    f = open(‘access.log‘,encoding=‘utf-8‘)    f.seek(point)#每次读取时的开始位置    for line in f.readlines():#获取到所有内容,每条进行循环        ip=line.split()[0] #按照空格分隔,取到第一个元素ip        if ip not in ips: #如果IP在字典中不存在            ips[ip]=1#新增一个IP,写道字典中        else:            ips[ip]+=1 #value在原来的基础上+1        print(ips)    point=f.tell()#记录读完之后的文件指针    for ip,count in ips.items(): #循环取到IP,count的值        if count>=200:            print(‘【%s】加入黑名单‘%ip)

time.sleep(60)  # 每次读取完休息60s,再次读取下一次

原文地址:https://www.cnblogs.com/xxy0703/p/10248807.html

时间: 2024-10-28 10:17:31

读取日志文件,并判断IP次数>200的加入黑名单的相关文章

请大神指导从大日志文件中统计关键字次数的办法

awk 'NR==FNR{a[$0]=1;next}{if($0 in a)b[$0]++}END{for (i in b)print i,b[i]}' filea fileb | sort 文件A中有若干行数据,每行为一个关键字文件B为大日志文件,大小为10G以下 想着能够统计出文件A中每个关键字在B中的出现次数,例如行1,3行2,10行3,100..... 最笨的办法是逐行读入后用grep,但是太费时间,有没有只打开一次B文件,就能把A中所有行都统计出来的办法呢? aaa 3 bbb 3 c

实时读取日志文件

需求:在生成日志文件的过程中,需要实时读取该日志,需要每次读取时记录一次读取的位置,下一次从该位置读取 参考:http://sunnylocus.iteye.com/blog/694666 问题:由于我是每次读取几十行日志就停止一次,如果使用上面连接的代码RandomAccessFile.length()记录文件位置,发现记录的位置远大于读取的位置,这样为导致丢失一部分信息 方法1:因为日志是一直在写,一开始从0开始,可以先记录一下当前读取位置的的指针,下一次开始读的时候从该处再次读取 方法1需

flume读取日志文件并存储到HDFS

配置hadoop环境 配置flume环境 配置flume文件 D:\Soft\apache-flume-1.8.0-bin\conf 将 flume-conf.properties.template 重新命名为  hdfs.properties # 组装 agenta1.sources = s1a1.channels = c1a1.sinks = k1 # 配置source:从目录中读取文件a1.sources.s1.type = spooldira1.sources.s1.channels =

读取日志文件,搜索关键字,打印关键字前5行。yield、deque实例

from collections import deque def search(lines, pattern, history=5): previous_lines = deque(maxlen=history) for line in lines: if pattern in line: yield line,previous_lines previous_lines.append(line) if __name__ == '__main__': with open('log.txt','r

mysql 的日志文件

mysql的日志文件 日志文件大致分为  error log, binary log, query log, slow query log, innodb redo log ;如图: 1.error log the error log file contains information indicating when mysqld was started and stopped also any critical errors that occur while the server is run

遍历日志文件并打印

<?phperror_reporting(E_ALL);ini_set('display_errors', 1); function load($file){ //No.1 //开始写代码,读取日志文件 $file = fopen($file,'r'); $contents = array(); while(!feof($file)) { $contents[] = fgets($file); } return $contents;} function eliminate($lines){ $n

[PHP] 读取大文件并显示

使用PHP读取日志文件,当文件比较大的时候,会报内存不足,因此应该部分读取,读取指定的行数的数据 PHP代码: <?php class Test{ //日志路径 const LOG_PATH="E:\phpServer\Apache\logs\error.log"; const NGINX_LOG_PATH="E:\phpServer\\nginx\logs\error.log"; //显示的行数 const PAGES=50; public static f

关于日志文件的一些处理

一. 一个日志文件,行的信息中包括调用的接口名,如何找出日志文件中访问量在前10位的接口. apis = [] # 定义空列表用于存放从日志行中取出的接口名with open('Log.txt') as fr: # 以行读取日志文件,并在行中截取出接口名存放至apis列表中 for line in fr: api = line.split(' ')[4] apis.append(api)api_set = list(set(apis)) # 为了在统计每个接口名个数时减少循环次数,把接口名列表做

针对Apache服务的优化与配置(一)——日志文件优化

针对Apache服务的优化与配置 日志分割 日志文件分析 Apache压缩 设置Apache缓存 一.日志分割 Apache日志文件默认存放位置: /var/log/httpd/ 默认分为access log和error log 实施日志分割的目的: 随着网站的访问量增加,默认情况下Apache的单个日志文件也会越来越大. 日志文件占用磁盘空间很大 查看相关信息不方便 进行日志分割的方式: 使用自带的rotatelogs分割工具实现(循环读取日志文件) 第三方工具cronolog分割 1-1 r