python脚本实现分析dns日志并对受访域名排行


Posted in Python onSeptember 18, 2014

前段时间有个需求是要求查一段时间的dns上的域名访问次数排行(top100),没办法,只好慢慢的去解析dns日志呗,正好学习了python,拿来练练手。

1.原始数据分析:

首先看下原始数据文件,即dns日志内容,下面是抽取的几条有代表性的日志,2×8.2×1.2x.1×5 这种中间的x是相应的数字被我抹去了。

13-08-30 03:11:34,226 INFO : queries: ? |1×3.2×8.2×0.2×0|config.dengluqi.net||config.34245.com.;127.0.0.1;||A|success|+|?G—- qr rd ra |1|
13-08-30 03:11:34,229 INFO : queries: ? |1×3.2×8.2x.2×8|p19.qhimg.com|default|2×8.2×1.2x.1×5;|default;|A|success|+|—w— qr aa rd ra |8061|
13-08-30 03:11:34,238 INFO : queries: ? |1×3.2×8.x.9x|shu.taobao.com|default|2×8.2×1.2x.1×5;|default;|A|success|+|—w— qr aa rd ra |59034|
13-08-30 03:11:34,238 INFO : queries: ? |1×3.2×8.2×7.1×2|cncjn.phn.live.baofeng.net|default|2×8.2×1.2x.17x;|default;|A|success|+|—w— qr aa rd ra |3004|

可以看出中间的日志采用的是|  分割的,shu.taobao.com 即为我们想要的数据域名,至于域名访问次数统计,则每个域名的一条记录算一次访问。由此我们可以确定一下两点:

a)采用| 作为分割符

b)第二个字段domain为目标数据,我们用作键值,即字典的key

c)domain[key]存储相应域名的访问次数

2.脚本构思:

a)我们的dns日志都是隔一段时间自动切割、压缩为gz文件,因此首先必须采用gzip.open去打开gz文件,这里需要导入gz库。

b)要求查找的是一段时间的域名排行,所以必须有得过滤一段时间,这里我采用了正则的方式去过滤,so导入re正则库。

c)排序,必须对结果进行排序,然后输出topXX的结果,由于是采用字典保存的,而字典是乱想的,所以必须有合适的办法去排序,字典的iteritems正好适用。

3.脚本编写:

明白了大致要点,脚本写起来就很easy了。

代码如下:

#write by siashero

import gzip

import re

file = gzip.open("e:\python_programs\queries.log.CBN-XA-1-3N3.20130803160052.gz")

domain_list= {}

print "time format is 13-08-04 19:1{1,2,3,4,5} "

time = raw_input("please enter a time you want to analysis")

while True:

line = file.readline()

if not line:

break

if re.search(time,line):

domain = line.split(‘|')[2]

if domain in domain_list:

domain_list[domain] += 1

else:

domain_list[domain] = 1

count = 0

for v in sorted(domain_list.iteritems(),key =lambda x:x[1],reverse=True):

print v[1],v[0]

#to print the only top20 domain

if count > 20:

break

count += 1

raw_input("enter a word to finish")

file.close

稍微说下脚本内容,queries.log.CMN-CQ.20130830031330.gz 为具体的一个目标文件,脚本主要是采用字典存储,以domain字段作为key,domain[key]存储访问次数。

稍后调用字典的iteritems 方法生产迭代器进行排序,最后输入top100的域名。

最后的raw_input(“enter a word to finish”) 是因为我在win7下测试的,默认执行完就一闪而过了,加入这行纯碎是为了观察结果,linux下可以删去。

这里稍微别扭的是时间的过滤采用的是正则去过滤的,所以要求输入必须是正则的方式,这点麻烦。

3.执行

说了大半天了,还是先跑下看看效果吧。

python脚本实现分析dns日志并对受访域名排行

可以看出正常输出了top20的域名。

4.总结:

大致实现了相应的要求,只是很多的文件处理的不大好。例如采用正规去过滤时间段,在数据量很大的情况下会对性能有影响。同时感谢同事,最后的字典的排序方法我是抄他的,感谢个~

Python 相关文章推荐
Python中3种内建数据结构:列表、元组和字典
Nov 30 Python
Python中easy_install 和 pip 的安装及使用
Jun 05 Python
基于Python数据可视化利器Matplotlib,绘图入门篇,Pyplot详解
Oct 13 Python
对变量赋值的理解--Pyton中让两个值互换的实现方法
Nov 29 Python
python实现对指定输入的字符串逆序输出的6种方法
Apr 26 Python
解决python3读取Python2存储的pickle文件问题
Oct 25 Python
python实现简单加密解密机制
Mar 19 Python
使用OpenCV实现仿射变换—旋转功能
Aug 29 Python
PYQT5开启多个线程和窗口,多线程与多窗口的交互实例
Dec 13 Python
python 日志模块logging的使用场景及示例
Jan 04 Python
Python 中如何使用 virtualenv 管理虚拟环境
Jan 21 Python
python中的装饰器该如何使用
Jun 18 Python
python中的字典详细介绍
Sep 18 #Python
python中执行shell命令的几个方法小结
Sep 18 #Python
python处理PHP数组文本文件实例
Sep 18 #Python
Python threading多线程编程实例
Sep 18 #Python
Python中捕捉详细异常信息的代码示例
Sep 18 #Python
python字符串连接的N种方式总结
Sep 17 #Python
Python实现的检测web服务器健康状况的小程序
Sep 17 #Python
You might like
php 分页原理详解
2009/08/21 PHP
PHP处理excel cvs表格的方法实例介绍
2013/05/13 PHP
JavaScript入门教程(9) Document文档对象
2009/01/31 Javascript
js实现仿百度瀑布流的方法
2015/02/05 Javascript
实例讲解javascript注册事件处理函数
2016/01/09 Javascript
JavaScript_ECMA5数组新特性详解
2016/06/12 Javascript
jQuery插件Easyui设置datagrid的pageNumber导致两次请求问题的解决方法
2016/08/06 Javascript
jQuery中JSONP的两种实现方式详解
2016/09/26 Javascript
详解Angular的数据显示优化处理
2016/12/26 Javascript
详解前端构建工具gulpjs的使用介绍及技巧
2017/01/19 Javascript
js实现年月日表单三级联动
2020/04/17 Javascript
jQuery pjax 应用简单示例
2018/09/20 jQuery
[48:23]DOTA2上海特级锦标赛主赛事日 - 4 败者组第四轮#1COL VS EG第一局
2016/03/05 DOTA
举例讲解Python中装饰器的用法
2015/04/27 Python
Python的string模块中的Template类字符串模板用法
2016/06/27 Python
Python实现的单向循环链表功能示例
2017/11/10 Python
Python3.6.0+opencv3.3.0人脸检测示例
2018/05/25 Python
pandas 实现字典转换成DataFrame的方法
2018/07/04 Python
Django框架的中的setting.py文件说明详解
2018/10/15 Python
解决python中画图时x,y轴名称出现中文乱码的问题
2019/01/29 Python
python简单鼠标自动点击某区域的实例
2019/06/25 Python
利用ImageAI库只需几行python代码实现目标检测
2019/08/09 Python
对python中return与yield的区别详解
2020/03/12 Python
tensorflow2.0的函数签名与图结构(推荐)
2020/04/28 Python
.img/.hdr格式转.nii格式的操作
2020/07/01 Python
HTML5-WebSocket实现聊天室示例
2016/12/15 HTML / CSS
金额转换,阿拉伯数字的金额转换成中国传统的形式如:(¥1011)-> (一千零一拾一元整)输出
2015/05/29 面试题
大学毕业生通用求职信
2013/09/28 职场文书
校园餐饮创业计划书
2014/01/10 职场文书
护士自我介绍信
2014/01/13 职场文书
2014年信用社工作总结
2014/11/25 职场文书
云台山导游词
2015/02/03 职场文书
2015年小学中秋节活动总结
2015/03/23 职场文书
Python面向对象之内置函数相关知识总结
2021/06/24 Python
Python面向对象编程之类的概念
2021/11/01 Python
如何利用golang运用mysql数据库
2022/03/13 Golang