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 09 Python
Pycharm在创建py文件时,自动添加文件头注释的实例
May 07 Python
使用Python来开发微信功能
Jun 13 Python
pandas 转换成行列表进行读取与Nan处理的方法
Oct 30 Python
python虚拟环境完美部署教程
Aug 06 Python
Python实现将蓝底照片转化为白底照片功能完整实例
Dec 13 Python
tensorflow实现读取模型中保存的值 tf.train.NewCheckpointReader
Feb 10 Python
python网络编程:socketserver的基本使用方法实例分析
Apr 09 Python
Python如何优雅删除字符列表空字符及None元素
Jun 25 Python
Python通过字典映射函数实现switch
Nov 06 Python
python re.match()用法相关示例
Jan 27 Python
PyCharm常用配置和常用插件(小结)
Feb 06 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 连接mssql数据库 初学php笔记
2010/03/01 PHP
php知道与问问的采集插件代码
2010/10/12 PHP
提高php运行速度的一些小技巧分享
2012/07/03 PHP
php 根据url自动生成缩略图并处理高并发问题
2014/01/23 PHP
php数组生成html下拉列表的方法
2015/07/20 PHP
PHP结合Mysql数据库实现留言板功能
2016/03/04 PHP
jQuery JSON的解析方式分享
2011/04/05 Javascript
jQuery $.get 的妙用 访问本地文本文件
2012/07/12 Javascript
学习js在线html(富文本,所见即所得)编辑器
2012/12/18 Javascript
javascript遇到html5的一些表单属性
2015/07/05 Javascript
JS更改select内option属性的方法
2015/10/14 Javascript
Bootstrap~多级导航(级联导航)的实现效果【附代码】
2016/03/08 Javascript
Bootstrap零基础入门教程(三)
2016/07/18 Javascript
浅谈 Vue v-model指令的实现原理
2017/06/08 Javascript
webpack4.0打包优化策略整理小结
2018/03/30 Javascript
vue中使用input[type="file"]实现文件上传功能
2018/09/10 Javascript
使用Sonarqube扫描Javascript代码的示例
2018/12/26 Javascript
浅谈vue限制文本框输入数字的正确姿势
2019/09/02 Javascript
Vue为什么要谨慎使用$attrs与$listeners
2020/08/27 Javascript
[06:49]2018DOTA2国际邀请赛寻真——VirtusPro傲视群雄
2018/08/12 DOTA
python3简单实现微信爬虫
2015/04/09 Python
K-近邻算法的python实现代码分享
2017/12/09 Python
让Django支持Sql Server作后端数据库的方法
2018/05/29 Python
python3+PyQt5 实现Rich文本的行编辑方法
2019/06/17 Python
iPython pylab模式启动方式
2020/04/24 Python
Python求区间正整数内所有素数之和的方法实例
2020/10/13 Python
html5组织内容_动力节点Java学院整理
2017/07/10 HTML / CSS
华润集团网上药店:健一网
2016/09/19 全球购物
TripAdvisor印尼站:全球领先的旅游网站
2018/03/15 全球购物
奇怪的鱼:Weird Fish
2018/03/18 全球购物
面试后感谢信怎么写
2014/02/01 职场文书
小学生元旦感言
2014/02/26 职场文书
2014最新股权信托合同协议书
2014/11/18 职场文书
反腐倡廉心得体会2016
2016/01/13 职场文书
“鬼灭之刃”热度不减,其成功背后的原因是什么?
2022/03/22 日漫
Go web入门Go pongo2模板引擎
2022/05/20 Golang