平時應急響應的時候可以利用一些小工具來使得工作事半功倍,看網上有一些比較優秀的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...