用于日志分析(分析日志文件)

用于日志分析(分析日志文件)

应急响应工具-日志分析

rizhi_find.py

#!/usr/bin/env python

# -*- coding:utf-8 -*-

import re

import requests

from retrying import retry

import os

from collections import Counter

# 需要分析的日志名称

# print dir(rizhifenxi_auto)

# 1、打开日志文件,将需要分析的日志保存log目录下

def open_file():

fpath = os.getcwd() + "/log/"

files = os.listdir(fpath)

for f in files:

for f in files: #

if os.path.isfile(fpath + f):

fhandle = open(fpath + f,'r')

aa = fhandle.readlines()

return aa,len(aa)

file,count=open_file()

headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko','Accept': 'text/html,application/xhtml+xml,image/jxr,*/*','Accept-Language': 'zh-CN','Connection': 'close'}

# 输出结果保存在result目录下

def save_path():

path = os.getcwd() + "/result/"

if not os.path.exists(path):

os.makedirs(path)

else:

pass

return path

weicha_ip=list()

guowai_ip=set()

ip_address = list()

path = save_path()

yichang_ip = list()

guowai_ip_lianjie = open(path + "guowai_ip_lianjie.txt","w")

# 在进行ip地址归属地查询过程中,可能由于查询归属地接口的原因,造成ip归属地查询失败,查询未成功的ip地址会保存在shibai_ip.txt中

@retry(stop_max_attempt_number=3)

def check_ip(dizhi):

URL='http://ip-api.com/json/'+dizhi+'?lang=zh-CN'

# try:

r = requests.get(URL,timeout=3,headers=headers)

json_data = r.json()

if json_data[u'status'] == 'success':

country = json_data[u'country'].encode('utf-8')

provice=json_data[u'regionName'].encode('utf-8')

city = json_data[u'city'].encode('utf-8')

if country not in "中国":

guowai_ip.add(dizhi)

aa= country,provice,city

# print aa

return aa

# except :

# yichang_ip.append(dizhi)

ip_list=list()

# 1、提取日志中ip地址

def ip_tiqu():

for i in file:

ip=re.findall(r'd+.d+.d+.d+',i.strip())

ip_list.append(ip[0])

return ip_list

# 2、对提取到的ip地址进行频率统计,并判断相关地址归属地

def ip_guishudi():

ip_tiqu()

result = Counter(ip_list)

result1 = dict(result)

res = sorted(result1.items(),key=lambda d: d[1],reverse=True)

for i in range(len(res)):

# print len (res);

ip=res[i][0];

if res[i][1]>20:

try:

bb=check_ip(dizhi=ip);

result= i,ip,bb,res[i][1]

ip_address.append(result)

except:

result = i,'查询失败',res[i][1]

ip_address.append(result)

return ip_address

# 4、根据输入的关键字进行搜索,支持最多两个关键字同时查找

def find_str():

find_result=open(path+"find_result.txt","w")

canshu1,canshu2,dingzhi=raw_input("please input keywords1:").split(',')

# print len(canshu2)

if len(canshu1)>0 and len(canshu2)==0 and len(dingzhi)==0:

for i in file:

if canshu1 in i:

# print i.strip()

find_result.write(i.strip()+'n')

elif len(canshu1)>0 and len(canshu2)>0 and dingzhi is str(1):

for i in file:

if canshu1 in i.strip() and canshu2 in i.strip():

print i.strip()

find_result.write(i.strip() + 'n')

elif len(canshu1)>0 and len(canshu2)>0 and dingzhi is str(2):

for i in file:

if canshu1 in i or canshu2 in i:

# print i.strip()

find_result.write(i.strip() + 'n')

else:

print "type error,please check your input"

find_result.close()

# 5、对查找到的结果进行ip地址提取,将提取结果保存在列表ip1中

fenxi_result=open(path+"find_result.txt","r").readlines()

for i1 in fenxi_result:

ip = re.findall(r'd+.d+.d+.d+',i1.strip())[0]

ip1.add(ip)

return ip1

# 6、查看ip1中的地址列表还访问过哪些url,并将结果保存在log.txt中

def url_tongji():

log=open(path+"log.txt","w")

for ip in find_str():

# print ip

for i in file:

if ip in i.strip() :

if str(200) or str(500) in i.strip():

# print i.strip()

log.write(i.strip()+'n')

# 7、筛选国外ip访问过的链接

def guowai_lianjie():

for i in guowai_ip:

for i in file:

for i1 in guowai_ip:

if i1 in i and i.split(' ')[8] in "200":

print i1.strip

guowai_ip_lianjie.write(i.strip()+'n')

if __name__=='__main__':

ip1=set()

ip_list=list()

# find_str()

url_tongji()

print "请在"+path+"文件夹下查看相关结果"

rizhifenxi.py

#!/usr/bin/env python

# -*- coding:utf-8 -*-

# 对日志中的访问路径进行汇总,根据数量进行排名,并将访问量前20的统计情况输出保存到表格中。

import xlwt

import re

from collections import Counter

import os

import rizhi_find

# _*_coding:utf-8_*_

url_list = list()

bb = list()

# 2、对日志url汇总规则:1、不对以css、txt等下面列表中后缀的url统计;2、通过空格分割,统计日志中的访问路径,存在吗?的路径只选取?前面的路径;3、由于可能存在不标准的日志格式,此处的切割规则也会不同,可以根据实际情况再做修改;

def countfiles():

info,count=rizhi_find.open_file()

for i in info:

if len(i.strip().split(' '))>6 and i.strip().split(' ')[6].endswith(('css','CSS','dae','DAE','eot','EOT','gif','GIF','ico','ICO','jpeg','JPEG','jpg','JPG','js','JS','map','MAP','mp3','MP3','pdf','PDF','png','PNG','svg','SVG','swf','SWF','ttf','TTF','txt','TXT','woff','WOFF')) == False:

path=i.strip().split('"')[1].rstrip(' HTTP/1.1')

# print path.rstrip(' HTTP/1.1')

time=i.strip().split(' ')[3]

# print time

url=path.split('?')[0]

url_list.append(url)

result = Counter(url_list)

result1 = dict(result)

# print result1

res = sorted(result1.items(),reverse=True)

# 3、这里是保存了url访问量前20的数据,也可以在做修改。

for i in range(0,20):

fangwen_url= res[i][0]

bili="%.2f%%" % (round(float(res[i][1])/float(count),2) * 100)

fangwen_cishu=res[i][1]

aa= i,fangwen_url,fangwen_cishu,bili

bb.append(aa)

return bb

# 4、将输出结果保存到url_tongji.xls的表格中

def baocun_url_biaoge():

path=os.getcwd() + "/result/"

if not os.path.exists(path):

os.makedirs(path)

else:

pass

workbook = xlwt.Workbook(encoding='utf-8')

sheet = workbook.add_sheet('url_tongji',cell_overwrite_ok=True)

sheet1 = workbook.add_sheet('ip_tongji',cell_overwrite_ok=True)

head = ['序号','访问次数','访问占比','url'] # sheet表头

head1 = ['序号','ip','ip归属地'] # sheet表头

alignment = xlwt.Alignment()

alignment.horz = xlwt.Alignment.HORZ_CENTER

alignment.vert = xlwt.Alignment.VERT_CENTER

style = xlwt.XFStyle() # Create Style

font = xlwt.Font() # 为样式创建字体

font.name = 'SimSun'

font.bold = False # 黑体

style.font = font

style.alignment = alignment # Add Alignment to Style

for h in range(len(head)):

sheet.write(0,h,head[h],style)

result=countfiles()

sheet.col(0).width = 256 * 5

sheet.col(1).width = 256 * 15

sheet.col(2).width = 256 * 15

sheet.col(3).width = 256 * 50

alignment = xlwt.Alignment()

alignment.horz = xlwt.Alignment.HORZ_CENTER

alignment.vert = xlwt.Alignment.VERT_CENTER

i=1

for a in result:

sheet.write(i,a[0],style)

sheet.write(i,1,a[2],2,a[3],3,a[1],style)

i += 1

# 5、生成ip查询情况统计表,此处只是统计了出现20次以上的ip地址;

for h3 in range(len(head1)):

sheet1.write(0,h3,head1

,style)

result1=rizhi_find.ip_guishudi()

sheet1.col(0).width = 256 * 5

sheet1.col(1).width = 256 * 20

sheet1.col(2).width = 256 * 15

sheet1.col(3).width = 256 * 50

alignment = xlwt.Alignment()

alignment.horz = xlwt.Alignment.HORZ_CENTER

alignment.vert = xlwt.Alignment.VERT_CENTER

h=1

for b in range(len(result1)):

quzhi= result1[b]

# print quzhi

sheet1.write(h,quzhi[0],style)

sheet1.write(h,quzhi[1],quzhi[3],quzhi[2],style)

h += 1

workbook.save(path+'tongji.xls')

print "请在"+path+"文件夹下查看相关结果"

if __name__=="__main__":

baocun_url_biaoge()

# countfiles()


[h2]使用手册

一、概述

在系统被入侵后,要想了解下系统被入侵的过程,最好的途径大概就是通过查看日志,对日志进行分析,来还原整个过程的来龙去脉。每次对几百兆的日志进行查看时确实头疼,尤其是对关键字进行搜索时还会出现编辑器卡顿的情况。所以就想着能不能利用脚本去完成一些常规的排查过程,来辅助完成日志分析工作,先简单说下日志分析的思路,此处只是对于web日志进行分析。

二、功能简述

1、根据关键字进行搜索

1) 目的:尝试通过在日志中搜索后门名称、时间等关键字,更快找到有用信息。

2) 使用方法:运行rizhi_find.py,该模块最多支持两个关键字搜索,关键字之间以逗号隔开,

当最后一个关键字为1时,表示对关键字1和关键字2同时进行搜索;

当最后一个关键字为2时,表示搜索满足关键字1或关键字2的日志;

当最后一个关键字为空时,表示只是对关键字1进行搜索;

3) 结果保存:搜索出的结果均会保存在当前目录下的find_result.txt文档中。

如搜索test.php,输入格式test.php,输出如下:

搜索10月6号访问test.php的日志,输入格式test.php,06/Oct/,1 输出如下:

搜索10月6号或访问test.php的日志,输入格式test.php,2 输出如下:

4) ip地址查询:

对搜索到结果进行ip地址提取,查看攻击者的ip还做过哪些操作,并将搜索结果保存在log.txt中

2、Ip、url分析

1) 目的:提取日志中所有的ip地址,并对ip归属地进行查询,并对出现次数做统计;根据日志分析url访问情况,记录访问路径、访问次数,并将结果保存到tongji.xsl表格中。

2) 使用方法:将需要查询的日志放到当前路径/log/目录下,运行python rizhifenxi.py。

3) 结果保存:会在result目录下生成tongji.xls。

url统计表

Ip地址统计表

三、有待改进

1、脚本思路多数来自平常的项目积累,所以想法过于单一,在今后遇到不同的情况会再继续完善;

2、很多时候即使是筛选出来后还是更多的靠人为去分析,脚本只是辅助工具,所以存在不够通用的问题;

3、ip地址在查询中由于查询接口原因,会存在查询失败的情况;

4、当日志格式为自定义情况下,需要根据定义格式在自行修改脚本中分割日志的格式;

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


有系统u盘要网络吗(有系统u盘要网络吗怎么连接)想要重新系统/维护少不了PE系统,目前网络上PE系统选择也挺多的,但是有些会内置捆绑推广内容。所以今天给大家分享「CMDPE」这个支持网络功能的纯净PE系统、可以上
u盘识别盘符不能格式化(u盘无法识别需要格式化)因为重装系统的原因,很多时候我们要将U盘作为系统启动盘,但是事后我们想要将U盘格式化,却发现无论怎么格式化,U盘空间无法释放。今天为大家做一个U盘启动教程,以备后用。1.右键单击计算机,点击管理。打开管理界面
u盘错误无法读取(u盘错误无法读取文件)U盘无法读取?出现这种状况的原因太多了。但有一种状况是经常发生的,那就是U盘在自己的电脑里读不出来,但在桌面右下角又有U盘的图标,而在电脑里却怎么也找不着,这是怎么回事呢?如果你将
电脑f2启动相应系统(电脑f2启动相应系统错误)开机后出现如下图界面,无法进入系统。我们看最后两条:尝试按F1,可以进入了BIOS,而按F2却一直卡着,无法进入系统,一会之后又自动关机。其实这是某品牌主板的通病,特别是一些低端的主板。在我
win7直接启动(win7直接启动admin)一共三种启动方式,针对台式机[给力][给力]第一种“冷启动”,又称“加电启动”,需要经过硬件自检第二种“重新启动”,由于是开机状态下进行重启,所以不需要硬件自检第三种“复位启动”,类似“冷启动”,但不需要重新打开电源。按下主机上的“Reset”复位开关即可。这是水淼·帝国CMS站群文章更新器的试用版本更新的文章,故
近期有些win7用户反映说,自己的电脑使用过程中就出现了蓝屏0x0000007b错误,需要经常重启,面对这个问题,很多小伙伴都不知道应该怎么解决,那么今天编程之家小编就来和广大用户们分享三种解决方法,有需要的用户都可以进行尝试,希望本期win7教程带来的内容可以解答大伙的问题,接下来跟随小编的步伐一起来看看详细步骤。
win7系统提示已关闭无线功能未能修复怎么解决?最近有些小伙伴想要连接无线网络的时候,弹出了提示,随后wlan图标就会变成了红色,这个是因为我们相关的功能都已经关闭了,因此才会无法连接使用,那么要如何重新设置修复开启呢,今日的win7教程就为大伙带来两种解决方法,有需要的用户欢迎来编程之家查看详细方法吧。
我们在使用win10系统的时候会经常的使用到复制粘贴功能,但是也有不少的用户们遇到了win10复制粘贴快捷键失效怎么办?用户们可以打开任务管理器下的windows资源管理器来进行操作就可以了。下面就让本站来为用户们来仔细的介绍一下win10复制粘贴快捷键失效解决方法吧。
最近有些升级到win11系统的用户遇到了cpu锁频的情况,导致整体的使用变得不流畅,锁频很经常发生,每次都需要手动去调整才能够恢复,面对这个问题,很多人都不清楚该怎么解决,那么今日的win11教程就来为广大用户们进行解答,接下来让我们一起来看看具体的操作步骤吧。
我们有些win10系统用户,电脑没有了声音,通过检测,发现是声卡驱动出现了问题,想要安装新的驱动程序,我们就需要将旧的声卡驱动卸载,有些小白不知道怎么卸载重装,针对这个问题,今日的win10教程就来为广大用户们进行解答,希望今天本站分享的内容可以帮助大伙解决问题。
win11防火墙关闭后还是会拦截怎么办?有些小伙伴因为程序或者是文件被防火墙拦截,经常打不开,因此关闭了,可是关闭后还是会提示某些内容被拦截,出现这个问题可能是部分对应的服务功能没有关闭,所以还能够进行拦截,那么今天编程之家小编就来和大伙分享详细的解决方法,希望今日的win11教程可以帮助更多人解答问。
一些win11系统用户,明明声音已经开得很大了,可是整体还是比较小,这个问题我们可以设置增强音频,那么就可以很大程度的提升音量,不少小伙伴不知道该怎么操作,接下来本期的win11教程就来为广大用户们进行解答,一起来看看详细的操作步骤吧。
我们win10电脑中有一个系统保护,这个功能可以保护电脑不会受到病毒的攻击,但是同时也会将一些常用的程序或者是文件错误拦截,每次都需要添加白名单,因此不少小伙伴想要直接关闭系统保护,可是不知道设置方法,本期的win10教程就来和广大用户们分享设置方法,有兴趣的小伙伴随时欢迎来编程之家查看完整步骤吧。
win10系统提示shellappsfolder没有注册类怎么解决?在安装或者是运行某些程序的时候,就会出现这个提示,都是以失败告终,面对这个问题,很多人都不清楚应该用什么方法来进行解决,那么本期的win10教程就来为广大用户们进行解答,接下来让我们一起来看看详细的操作步骤吧。
win10本地账户无法删除怎么解决?我们在使用win10系统的时候会发现自己的本地账户不能删除的情况,那么用户们遇到这种情况要怎么解决?用户们可以直接的打开控制面板下来进行操作就可以了。下面就让本站来为用户们来仔细的介绍一下win10本地账户无法删除的解决方法吧。
我们在使用win11的时候会发现任务栏的高度有点高,对一些用户们来说感觉有点不美观,那么win11任务栏高度怎么缩小?用户们可以直接的点击开始菜单下的注册表编辑器,然后找到Advanced文件夹来进行操作就可以了。下面就让本站来为用户们来仔细的介绍一下windows11调整任务栏大小的方法吧。
win11打开文件夹一直转圈圈怎么办?我们在使用win11系统的时候有时候需要打开文件夹,但是也有不少的用户们在询问打开文件夹的时候一直在转圈圈,那么这要怎么办?用户们可以直接的找到计算机下的Shell Extensions文件夹来进行操作,下面就让本站来为用户们来仔细的介绍一下win11打开文件夹一直转圈圈详解吧。
我们在使用win11系统的时候有时候会需要使用到hyper-v选项,但是也有不少的用户们在询问win11没有hyper-v选项怎么办?用户们可以直接的新建一个文本文档,然后复制下面的代码来进行操作就可以了,下面就让本站来为用户们来仔细的介绍一下win11找不到hyper-v选项问题解析吧。
ROG 枪神6 Plus笔记本搭载了4芯90Wh锂离子电池,续航能力强大,可以满足用户长时间使用的需求,但是也有不少的用户们在询问ROG 枪神6 Plus笔记本怎么重装win7系统,下面就让本站来为用户们来仔细的介绍一下ROG 枪神6 Plus笔记本重装win7系统教程吧。
win10网页拦截设置怎么取消?我们在使用win10系统的时候会发现自己网页被拦截了,这就使得很多用户们发现都不能进入到网页里面,那么这是怎么回事?用户们可以直接的找到浏览器下的设置然后来进行操作就可以了。下面就让本站来为用户们来仔细的介绍一下win10网页拦截设置取消方法吧。