1. 程式人生 > >Python文件練習_查找log中的IP並統計

Python文件練習_查找log中的IP並統計

直接 讀文件 dmi 不能 access 實時 split enc p地址

需求:監控日誌,如果有攻擊,就把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)#每分鐘讀一次

Python文件練習_查找log中的IP並統計