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 相关文章推荐
Django Admin 实现外键过滤的方法
Sep 29 Python
Python实现的查询mysql数据库并通过邮件发送信息功能
May 17 Python
关于python列表增加元素的三种操作方法
Aug 22 Python
python tkinter组件摆放方式详解
Sep 16 Python
python实现代码统计器
Sep 19 Python
pytorch梯度剪裁方式
Feb 04 Python
Python定时任务APScheduler安装及使用解析
Aug 07 Python
python开根号实例讲解
Aug 30 Python
python安装第三方库如xlrd的方法
Oct 31 Python
TensorFlow的自动求导原理分析
May 26 Python
用Python仅20行代码编写一个简单的端口扫描器
Apr 08 Python
用PYTHON去计算88键钢琴的琴键频率和音高
Apr 10 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
使用 eAccelerator加速PHP代码的目的
2007/03/16 PHP
PHP中的string类型使用说明
2010/07/27 PHP
分享下PHP register_globals 值为on与off的理解
2013/09/26 PHP
PHP中遇到的时区问题解决方法
2015/07/23 PHP
php进程daemon化的正确实现方法
2018/09/06 PHP
php中的钩子理解及应用实例分析
2019/08/30 PHP
laravel 解决多库下的DB::transaction()事务失效问题
2019/10/21 PHP
php多进程并发编程防止出现僵尸进程的方法分析
2020/02/28 PHP
JavaScript事件列表解说
2006/12/22 Javascript
用apply让javascript函数仅执行一次的代码
2010/06/27 Javascript
jquery关于页面焦点的定位(文本框获取焦点时改变样式 )
2010/09/10 Javascript
初学js插入节点appendChild insertBefore使用方法
2011/07/04 Javascript
jquery easyui滚动条部分设置介绍
2013/09/12 Javascript
一个简单的jquery的多选下拉框(自写)
2014/05/05 Javascript
javascript实现左右控制无缝滚动
2014/12/31 Javascript
jquery加载图片时以淡入方式显示的方法
2015/01/14 Javascript
动态加载js、css的实例代码
2016/05/26 Javascript
Angular 作用域scope的具体使用
2017/12/11 Javascript
jQuery实现监听下拉框选中内容发生改变操作示例
2018/07/13 jQuery
ligerUI的ligerDialog关闭刷新的方法
2019/09/27 Javascript
Vue解析剪切板图片并实现发送功能
2020/02/04 Javascript
小程序实现背景音乐播放和暂停
2020/06/19 Javascript
jquery插件实现轮播图效果
2020/10/19 jQuery
[47:03]Ti4第二日主赛事败者组 LGD vs iG 2
2014/07/21 DOTA
Python爬豆瓣电影实例
2018/02/23 Python
Python多线程多进程实例对比解析
2020/03/12 Python
Python面向对象程序设计之继承、多态原理与用法详解
2020/03/23 Python
Python实现一个优先级队列的方法
2020/07/31 Python
canvas实现图片镜像翻转的2种方式
2020/07/22 HTML / CSS
完美实现CSS垂直居中的11种方法
2021/03/27 HTML / CSS
2015年学校总务处工作总结
2015/05/19 职场文书
刑事附带民事起诉状
2015/05/19 职场文书
婚礼长辈答谢词
2015/09/29 职场文书
只用20行Python代码实现屏幕录制功能
2021/06/02 Python
Mysql事务索引知识汇总
2022/03/17 MySQL
Django中celery的使用项目实例
2022/07/07 Python