Python文件练习_查找log中的IP并统计

需求:监控日志,如果有攻击,就把ip加入黑名单

分析:

1、打开日志文件

2、把ip地址拿出来

3、判断每一个ip出现的次数,如果大于50次的话,加入黑名单

4、每分钟读一次

log样式:

178.210.90.90 - - [04/Jun/2017:03:44:13 +0800] "GET /wp-includes/logo_img.php HTTP/1.0" 302 161 "http://nnzhp.cn/wp-includes/logo_img.php" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/533.4 (KHTML, like Gecko) Chrome/5.0.375.99 Safari/533.4" "10.3.152.221"
178.210.90.90 - - [04/Jun/2017:03:44:13 +0800] "GET /blog HTTP/1.0" 301 233 "http://nnzhp.cn/wp-includes/logo_img.php" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/533.4 (KHTML, like Gecko) Chrome/5.0.375.99 Safari/533.4" "10.3.152.221"
178.210.90.90 - - [04/Jun/2017:03:44:15 +0800] "GET /blog/ HTTP/1.0" 200 38278 "http://nnzhp.cn/wp-includes/logo_img.php" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/533.4 (KHTML, like Gecko) Chrome/5.0.375.99 Safari/533.4" "10.3.152.221"
66.249.75.29 - - [04/Jun/2017:03:45:55 +0800] "GET /bbs/forum.php?mod=forumdisplay&fid=574&filter=hot HTTP/1.1" 200 17482 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" "-"
37.9.169.20 - - [04/Jun/2017:03:47:59 +0800] "GET /wp-admin/security.php HTTP/1.1" 302 161 "http://nnzhp.cn/wp-admin/s

实现:

import time
point = 0 #每次记录文件指针的位置
while True:#持续读取实时更新的log
    all_IP = []
    f=open(‘access.log‘,encoding=‘utf-8‘)
    #不能用read来直接读文件,文件从磁盘打开载入内存,进入cpu分析,若文件过大,内存会被占满,电脑回卡死
    f.seek(point)  # 移动文件指针,已统计过的IP不再额外统计
    for line in f:#直接循环一个文件对象的话,每次循环的是文件的每一行
        IP = line.split(‘-‘)[0].strip()#取出IP
        all_IP.append(IP)#将IP放入列表
    point = f.tell()  # 记录了指针的位置
    all_IP_set = set(all_IP)#集合天生去重
    for i in all_IP_set:#循环集合比循环列表效率高,已去重
        if all_IP.count(i) > 50:
            print(‘加入黑名单的IP是%s,一分钟内出现了%s次‘%(i,all_IP.count(i)))
    f.close()
    time.sleep(60)#每分钟读一次

原文地址:https://www.cnblogs.com/dongrui624/p/8804264.html

时间: 2024-10-30 14:27:28

Python文件练习_查找log中的IP并统计的相关文章

awk , 统计secure.log中 每个破解你密码的ip的出现次数|access.log 中 每个ip地址出现的次数

统计secure.log中 每个破解你密码的ip的出现次数 [[email protected] files]# awk '/Failed password/{h[$(NF-3)]++}END{for(pol in h) print pol,h[pol]}' secure-20161219 |sort -rnk2|head 统计access.log 中 每个ip地址出现的次数 [[email protected] files]# awk '{h[$1]++}END{for(pol in h) p

python文件操作_对文件进行复制拷贝_代码实现

要求: 1,对已经存在的文件进行复制操作 2,复制后的文件在文件名后面加上[复件] 3,文件比较大如何优化处理 1 #-*- coding: UTF-8 -*- 2 #这是python 2 下面写的,用的raw_input 3 #old_file_name用来接收输入的文件名 4 old_file_name = raw_input('请输入要复制的文件名:') 5 #打开输入的文件 6 old_file = open(old_file_name,'r') 7 8 #对新文件的名字进行处理,在后缀

C#调用python文件执行

我的电脑环境是使用.net framework4.5.1,如果在调试过程中调不通请注意 我用的是Visual studion 2017,python组件下载地址:http://ironpython.codeplex.com/releases/view/ 下载的版本是2.7,下载安装完之后记得引入安装路径下的以下三个dll (1)首先先说一个简单的功能,在c#代码中执行python字符串,内容如下: (2)c#调用python文件: 在当前目录下新建一个后缀名为py的文件,文件名为AmoutDis

如何调用另一个python文件中的代码

如何调用另一个python文件中的代码 无论我们选择用何种语言进行程序设计时,都不可能只有一个文件(除了"hello world"),通常情况下,我们都需要在一个文件中调用另外一个文件的函数呀数据等等,总之要操作其他文件中的代码,在java中,只要在同一个文件目录下,我们就不需要通过import导入,但是在Python中,我们就需要通过import来进行导入,这样我们才能应用其他文件中定义的函数和数据等代码. 对于刚接触python的我们,这是我们需要掌握的. 下面就以两个文件为例,例

python基础教程_学习笔记21:文件和素材

文件和素材 打开文件 open函数用来打开文件,语法如下: open([name[,mode[,buffering]]) open函数使用一个文件名作为唯一的强制参数,然后返回一个文件对象.模式(mode)和缓冲(buffering)参数都是可选的. >>> f=open(r'D:\software(x86)\Python27\README.txt') 如果文件不存在,则出现错误: >>> f=open(r'D:\software(x86)\Python27\READM

使用Python boto3上传Windows EC2实例中的文件至S3存储桶中

一.创建终端节点 为什么要创建终端节点,把VPC和S3管理起来呢?如果不将VPC和S3通过终端节点管理起来,那么VPC中EC2实例访问S3存储桶是通过公共网络的:一旦关联起来,那么VPC中EC2实例访问S3存储桶走的就是内部网络.好处有两个:1. 走内部网络就不会产生流量费用:2. 走内部网络速度快,不会因为网络原因导致我们的Python脚本产生异常. VPC->终端节点->创建终端节点->将VPC和S3关联->关联子网 二.在Windows中安装Python3编译器以及boto3

Python 查找Twitter中最流行(转载最多)的10个Tweet

CODE: #!/usr/bin/python # -*- coding: utf-8 -*- ''' Created on 2014-7-4 @author: guaguastd @name: find_popular_retweets.py ''' # Finding the most popular retweets def popular_retweets(statuses): retweets = [ # Store out a tuple of these three values.

Python 自动化开发_文件处理

一.python 文件处理学习 1.1 为什么需要学习对文件处理: 简单的来说.对文件操作的处理是相当重要的.如果不会如何对文件进行处理.那么就等同于不会使用python.说得一点也不严重.现在您清楚了吧!So 对文件处理的操作是相当重要De 1.2 文件操作流程: 打开文件.得到文件句柄后赋值给一个变量 通过文件句柄并赋值给一个变量 关闭文件 1 You're insecure 2 Don't know what for 3 You're turning heads 4 When you wa

python学习之——文件过滤,不显示文件中以‘#’开头的行

#题目:文件过滤,不显示文件中以#开头的行 #来源:python核心编程9.11练习9-1 import os def content_filter(filename): fobj = open(filename,'r') for eachLine in fobj: if eachLine[0] == "#": continue else: print eachLine, fobj.close() if __name__ == '__main__': filename = raw_in