python---实战日志文件中查找特定字段,文件操作读写、排序、替换、列表、集合

来源:互联网 发布:循环更新数据库 编辑:程序博客网 时间:2024/05/16 12:48

python—实战日志文件中查找特定字段,文件操作读写、排序、替换、列表、集合
在服务器上新建以下文件:

root@kali:~/python/laowangpy# lsidsearch.py   logid.txt    id.txt        memid.txt      result.txt root@kali:~/python/laowangpy# root@kali:~/python/laowangpy# ls -la总用量 444drwxr-xr-x  2 root root   4096  920 22:20 .drwxr-xr-x 16 root root   4096  93 09:27 ..-rw-r--r--  1 root root   2283  920 21:19 idsearch.py-rw-r--r--  1 root root 305046  920 21:19 id.txt-rw-r--r--  1 root root   8991  920 21:18 logid.txt-rw-r--r--  1 root root   1090  920 21:18 memid.txt-rw-r--r--  1 root root  18929  920 22:21 result.txtroot@kali:~/python/laowangpy# 

原始日志文件(使用*号对敏感数据进行打码处理)

root@kali:~/python/laowangpy# more id.txt122.155.130.** > 172.16.162.**:80 - - [20/Sep/2017:03:51:39 +0800] merchants.*****.com "POST /api/login HTTP/1.0" 200 72 "https://merchants.*****.com/" 200 172.16.162.**:9090 0.039 0.026 "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.221 Safari/537.36 SE 2.X MetaSr 1.0" "122.155.130.**, 47.89.13.250" "{\x22merchantId\x22:\x222001****23\x22,\x22userId\x22:\x22admin***\x22,\x22passWord\x22:\x2236e1b00693b5e06440aeafca80*****\x22,\x22loginType\x22:\x221\x22}".........................................--More--(1%)122.155.130.** > 172.16.162.**:80 - - [20/Sep/2017:14:08:26 +0800] merchants.*****.com "POST /api/login HTTP/1.0" 200 564 "https://merchants.*****.com/" 200 172.16.162.14:9090 0.563 0.403 "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.221 Safari/537.36 SE 2.X MetaSr 1.0" "122.155.130.**, 47.88.50.**" "{\x22passWord\x22:\x221c477b2365d1566c555766f0d1d*****\x22,\x22userId\x22:\x22admin***\x22,\x22merchantId\x22:\x222001****25\x22,\x22loginType\x22:\x221\x22}"122.155.130.** > 172.16.162.**:80 - - [20/Sep/2017:14:24:36 +0800] merchants.*****.com "POST /api/login HTTP/1.0" 200 564 "https://merchants.*****.com/" 200 172.16.162.**:9090 0.512 0.306 "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.221 Safari/537.36 SE 2.X MetaSr 1.0" "122.155.130.**, 47.88.50.50" "{\x22merchantId\x22:\x222001****25\x22,\x22userId\x22:\x22admin***\x22,\x22passWord\x22:\x22b84d6d159aa9606ccbfd181456*****\x22,\x22loginType\x22:\x221\x22}"root@kali:~/python/laowangpy# 

需要分析的账户ID值(使用*号对敏感数据进行打码处理):

root@kali:~/python/laowangpy# cat memid.txt 2001****012001****02..............................2001****962001****972001****982001****99root@kali:~/python/laowangpy# 

需要分析的登录ID值(使用*号对敏感数据进行打码处理):

root@kali:~/python/laowangpy# more logid.txt admin**1admin**2admin**3........................admin**8admin**9--More--(4%)

执行的脚本文件:

root@kali:~/python/laowangpy# cat idsearch.py #!/usr/bin/python# --*-- coding:utf-8 --*--#把存放结果的result.txt文本内容清空,每次运行脚本,都先清空,在写入内容f4 = open('result.txt','w')f4.write('')#清空文件内容f4.close()# 读取原始的日志文件m = open('id.txt').read()#全部读取日志文件m = m.replace("\\",'%')#对\\字符使用%替换#print mn = m.replace('%x22',' ')#对%x22字符使用空格替换#print nl = n.split(' ')#对出现的空格进行字符串分割,此步骤很关键!!print '----------------------------------------------------------------------------------'#print l#读取登录的账号ID值f1 = open('memid.txt').read()#全部读取内容r = f1.replace('\n','%')#对账户ID中换行符号使用%替换s = r.split('%')#对账户ID进行%分割#print s#把账户ID值转成列表t = [(x,l.count(x)) for x in s]#在整理成新日志的列表l中,对列表s遍历查找账户ID值,如果存在,则统计次数,此处参考http://blog.csdn.net/xwbk12/article/details/78014509 的第2答题#print tv =sorted(t)#对列表t转换成集合v#print vprint '===========账户ID值,及统计次数===================='u = sorted(t,key=lambda x:x[1],reverse=True)#对集合v中使用第二个key值大小,并从大到小排序print u#列表不能直接写入文件,只能转换成字符串,才可以写入文件中#对读取日志匹配到的账户id值,使用追加方式写入result.txt文件中str1 = str(u)#转换字符串才可以写入文件f3 = open('result.txt','a+')#f3.write('\n')f3.write(str1)#对转换的字符串进行写入文本中f3.write('\n')f3.close()#读取登录ID值f2=open('logid.txt').read()#全部读出登录ID值a = f2.replace('\n','%')#对登录ID中换行符使用%替换b = a.split('%')#对登录ID进行%分割c = [(x,l.count(x)) for x in b]#在整理成日志的列表l中,对列表b遍历查找登录ID值,如果存在,则统计次数,此处参考http://blog.csdn.net/xwbk12/article/details/78014509 的第2答题d = sorted(c)#对列表t转换成集合de = sorted(c,key=lambda x:x[1],reverse=True)#对集合b中使用第二个key值大小,并从大到小排序print '------------登录ID值adminxxx,及统计次数--------------'print e#列表不能直接写入文件,只能转换成字符串,才可以写入文件中#对读取日志匹配到的登录id值,使用追加方式写入result.txt文件中str2 =str(e)#转换字符串才可以写入文件f3 = open('result.txt','a+')f3.write('\n')f3.write(str2)#转换字符串才可以写入文件f3.write('\n')f3.close()root@kali:~/python/laowangpy# 

保存结果的文件信息:

root@kali:~/python/laowangpy# more result.txt [('2001****12', 60), ('2001****34', 54), ('2001****26', 34), ('2001****21', 32), ('2001****32', 28), ('2001****02', 24), ('2001****33', 24), ('2001****22', 22), ('2001****23', 22), ('2001****07', 18), ('2001****24', 18), ('2001****28', 18), ('2001****31', 16), ('2001****13', 14), ('2001****29', 14), ('2001****20', 12), ('2001****25', 12), ('2001****08', 8), ('2001****18', 8), ('2001****19', 8), ('2001****06', 6), ('2001****01', 0),...........][('admin361', 54), ('admin025', 32), ('admin720', 32), ('admin367', 28), ('admin005', 24), ('admin936', 24), ('admin943', 24), ('admin964', 22), ('admin847', 20), ('admin412', 18), ('admin602', 18), ('admin610', 18), ('admin165', 16), ('admin119', 14), ('admin968', 14), ('admin263', 12), ('admin407', 12), ('admin030', 8), ('admin167', 8), ('admin223', 8), ('admin705', 6), ('admin001', 0),......]
阅读全文
0 0