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 装饰器功能以及函数参数使用介绍
Jan 27 Python
python写的一个文本编辑器
Jan 23 Python
Python multiprocessing模块中的Pipe管道使用实例
Apr 11 Python
Numpy数组转置的两种实现方法
Apr 17 Python
详解pyqt5 动画在QThread线程中无法运行问题
May 05 Python
Python字典循环添加一键多值的用法实例
Jan 20 Python
在Python中居然可以定义两个同名通参数的函数
Jan 31 Python
python实现车牌识别的示例代码
Aug 05 Python
python输出决策树图形的例子
Aug 09 Python
Python基础之高级变量类型实例详解
Jan 03 Python
基于pytorch 预训练的词向量用法详解
Jan 06 Python
python脚本和网页有何区别
Jul 02 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中文分词 自动获取关键词介绍
2012/11/13 PHP
php动态函数调用方法
2015/05/21 PHP
PHP面向对象程序设计之对象生成方法详解
2016/12/02 PHP
IOS 开发之NSDictionary转换成JSON字符串
2017/08/14 PHP
PHP面向对象程序设计之构造方法和析构方法详解
2019/06/13 PHP
BOOM vs RR BO5 第一场 2.14
2021/03/10 DOTA
数组方法解决JS字符串连接性能问题有争议
2011/01/12 Javascript
用js实现小球的自由移动代码
2013/04/22 Javascript
jquerydom对象的事件隐藏显示和对象数组示例
2013/12/10 Javascript
jQuery带进度条全屏图片轮播特效代码分享
2020/06/28 Javascript
JavaScript性能优化之小知识总结
2015/11/20 Javascript
利用jQuery实现WordPress中@的ID悬浮显示评论内容
2015/12/11 Javascript
BootStrap3学习笔记(一)之网格系统
2016/05/20 Javascript
JavaScript程序中实现继承特性的方式总结
2016/06/24 Javascript
省市二级联动小案例讲解
2016/07/24 Javascript
jQuery插件form-validation-engine正则表达式操作示例
2017/02/09 Javascript
node+express+ejs使用模版引擎做的一个示例demo
2017/09/18 Javascript
简单谈谈vue的过渡动画(推荐)
2017/10/11 Javascript
node.js多个异步过程中判断执行是否完成的解决方案
2017/12/10 Javascript
vue中使用better-scroll实现滑动效果及注意事项
2018/11/15 Javascript
vue如何截取字符串
2019/05/06 Javascript
详解VSCode配置启动Vue项目
2019/05/14 Javascript
详解React 条件渲染
2020/07/08 Javascript
Python UnicodeEncodeError: 'gbk' codec can't encode character 解决方法
2015/04/24 Python
分享Python开发中要注意的十个小贴士
2016/08/30 Python
Python实现霍夫圆和椭圆变换代码详解
2018/01/12 Python
Python3实现带附件的定时发送邮件功能
2020/12/22 Python
使用Django2快速开发Web项目的详细步骤
2019/01/06 Python
python GUI库图形界面开发之PyQt5控件数据拖曳Drag与Drop详细使用方法与实例
2020/02/27 Python
介绍一下Mysql的存储引擎
2015/02/12 面试题
模范家庭事迹材料
2014/02/10 职场文书
铲车司机岗位职责
2014/03/15 职场文书
与美同行演讲稿
2014/09/13 职场文书
财政局长个人总结
2015/03/04 职场文书
奇妙的 CSS shapes(CSS图形)
2021/04/05 HTML / CSS
pytorch分类模型绘制混淆矩阵以及可视化详解
2022/04/07 Python