日誌讀取 利用Python實現Web日誌分析

2021-10-16 04:06:59 字數 2175 閱讀 2391

平時應急響應的時候可以利用一些小工具來使得工作事半功倍,看網上有一些比較優秀的web日誌分析工具。用過一次奇安信的360星圖日誌分析工具,該款工具會根據內建的一些攻擊規則生成分析報告。

但是這個工具個性化還是有欠缺的,比如我想搜尋**日誌狀態碼為404的,請求體中帶有phpinfo的,所有就突發奇想寫了一款自定義搜尋**日誌功能小工具。

程式編寫總體思路分三部分,讀取web日誌檔案、分析日誌內容、根據分析結果生成對應報表。

在讀取日誌時候我們時候使用sys.ar**函式,該函式是從程式外部讀取引數,程式在執行前將日誌檔案路徑帶入,增加程式易用性。使用open函式開啟日誌檔案。

import re,sys,xlwt,requestsweblog_dir=sys.ar**[1]weblog = open(weblog_dir)
到這裡我們已經完成日誌檔案讀取操作了

162.158.187.123 - - [03/apr/2020:10:43:01 +0800] "get /phpmyadmin/index.php http/1.1" 404 263 "-" "mozilla/5.0 (windows nt 10.0; wow64; rv:46.0) gecko/20100101 firefox/46.0"
因為生成的資料每條格式都一樣,我們可以使用正規表示式來提取關鍵字段,python中可以使用re模組來實現正則功能。通過下面**就可提權關鍵字段ip、time、request、status、bytes、referer、ua

reobj=re.compile(r'(?p.*?) - - [(?p.*?)] "(?p.*?)" (?p.*?) (?p.*?) "(?p.*?)" "(?p.*?)"')
處理資料的時候需要定義乙個函式,函式需要傳遞2個引數,乙個是搜尋的字段,乙個是要搜尋的值。使用for x in y迴圈將y裡面多行內容依次迴圈讀出賦給x。使用正則表達模組中match函式進行匹配,groupdit函式是將結果生成字典。

def search(search_key,search_value):    for line in weblog:        re_result=reobj.match(line)        re_arry=re_result.groupdict()        if search_key == 'request':            if search_value in re_arry['request']:                print(re_arry)        else:            if re_arry[search_key]==search_value:                print(re_arry)
可以將以上執行的結果存放到excel**中,可以使用xlwt模組實現該功能。

xlwt.workbook是建立excel**函式,add_sheet函式是建立sheet工作表的函式。

workbook = xlwt.workbook(encoding='utf-8')worksheet = workbook.add_sheet("lesssafe安全團隊web日誌分析")
程式多次呼叫寫excel操作,所以可以定義乙個write_xls函式。write是xlwt模組寫入資料函式,帶入的三個引數分別代表行、列、資料

def write_xls(re_ipadd,ip,time,request,status,bytes,referer,ua,row):    worksheet.write(row, 0, re_ipadd)    worksheet.write(row, 1, ip)    worksheet.write(row, 2, time)    worksheet.write(row, 3, request)    worksheet.write(row, 4, status)    worksheet.write(row, 5, bytes)    worksheet.write(row, 6, referer)    worksheet.write(row, 7, ua)
在平時應急響應的時候可以根據自己業務特點進行**修改、擴充套件,本文章只提供乙個思路,在後期可以增加很多功能,比如根據業務特點寫乙個ids庫。

python實現讀取日誌

我們測試的過程中,如果遇到需要讀取日誌該怎麼通過python實現呢。測試小白的我寫了個python指令碼來實現讀取伺服器上的日誌。下面的例子是我的乙個測試需求 讀取日誌中的某個字段例如欄位a和我的預期結果作比較。實現之前我們需要知道伺服器的位址 日誌檔案所在的路徑 日誌的名稱以及日誌的結構,最好先自...

利用xlrd模組實現Python讀取Excel文件

coding cp936 python讀取excel import xlrd defmain xls xlrd.open workbook d 11.xls try mysheet xls.sheet by name sheet1 找到名為sheet1的工作表。區分大小寫 except print ...

python讀取日誌檔案

下面是我們的日誌檔案,裡面都是一條條這樣的資料 為了將讀取的日誌檔案存入mysql,我們需要讀取日誌檔案,然後按照指定格式切割出需要的資料 表字段會是time,ip level,messages 這個可以處理大檔案,因此每次只讀取一行 def read log 讀取日誌檔案,進行資料重組,寫入mys...