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使用marshal模块序列化实例
Sep 25 Python
实例讲解Python设计模式编程之工厂方法模式的使用
Mar 02 Python
python3 与python2 异常处理的区别与联系
Jun 19 Python
基于Python的接口测试框架实例
Nov 04 Python
Python求出0~100以内的所有素数
Jan 23 Python
Python批量合并有合并单元格的Excel文件详解
Apr 05 Python
Python cookbook(字符串与文本)在字符串的开头或结尾处进行文本匹配操作
Apr 20 Python
matplotlib调整子图间距,调整整体空白的方法
Aug 03 Python
Python使用Pandas库常见操作详解
Jan 16 Python
tensorflow使用L2 regularization正则化修正overfitting过拟合方式
May 22 Python
Python使用正则表达式实现爬虫数据抽取
Aug 17 Python
python音频处理的示例详解
Dec 23 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
DSP接收机前端设想
2021/03/02 无线电
php报表之jpgraph柱状图实例代码
2011/08/22 PHP
Linux系统下PHP-FPM的安装和配置教程
2015/08/17 PHP
Yii2学习笔记之汉化yii设置表单的描述(属性标签attributeLabels)
2017/02/07 PHP
PHP PDOStatement::fetch讲解
2019/01/31 PHP
基于jquery的兼容各种浏览器的iframe自适应高度的脚本
2010/08/13 Javascript
js加载读取内容及显示与隐藏div示例
2014/02/13 Javascript
jquery分析文本里url或邮件地址为真实链接的方法
2015/06/20 Javascript
JS+CSS实现经典的左侧竖向滑动菜单效果
2015/09/23 Javascript
浏览器环境下JavaScript脚本加载与执行探析之动态脚本与Ajax脚本注入
2016/01/19 Javascript
使用DataTable插件实现异步加载数据
2017/11/19 Javascript
利用vue组件自定义v-model实现一个Tab组件方法示例
2017/12/06 Javascript
9种使用Chrome Firefox 自带调试工具调试javascript技巧
2017/12/22 Javascript
layui框架table 数据表格的方法级渲染详解
2018/08/19 Javascript
浅谈layui 绑定form submit提交表单的注意事项
2019/10/25 Javascript
node.js域名解析实现方法详解
2019/11/05 Javascript
vue 微信分享回调iOS和安卓回调出现错误的解决
2020/09/07 Javascript
Django静态资源URL STATIC_ROOT的配置方法
2014/11/08 Python
在Python的Django框架中获取单个对象数据的简单方法
2015/07/17 Python
Python实现读取及写入csv文件的方法示例
2018/01/12 Python
python将list转为matrix的方法
2018/12/12 Python
django删除表重建的实现方法
2019/08/28 Python
解决Django layui {{}}冲突的问题
2019/08/29 Python
深入理解Python 多线程
2020/06/16 Python
python代码区分大小写吗
2020/06/17 Python
Python爬虫实现selenium处理iframe作用域问题
2021/01/27 Python
CSS3实现3D翻书效果
2016/06/20 HTML / CSS
纯CSS3实现运行时钟的示例代码
2021/01/25 HTML / CSS
HTML5中div、article、section的区别及使用介绍
2013/08/14 HTML / CSS
大学毕业生个人自荐信范文
2014/01/08 职场文书
入党自我评价优缺点
2014/01/25 职场文书
工作会议主持词
2014/03/17 职场文书
乡村卫生服务一体化管理实施方案
2014/03/30 职场文书
申请吧主发表的感言
2015/08/03 职场文书
2016教师党员学习心得体会
2016/01/21 职场文书
秀!学妹看见都惊呆的Python小招数!【详细语言特性使用技巧】
2021/04/27 Python