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 元组(Tuple)操作详解
Mar 11 Python
在python中使用正则表达式查找可嵌套字符串组
Oct 24 Python
浅谈python迭代器
Nov 08 Python
Python中循环后使用list.append()数据被覆盖问题的解决
Jul 01 Python
浅谈Python里面小数点精度的控制
Jul 16 Python
python控制nao机器人身体动作实例详解
Apr 29 Python
python安装numpy和pandas的方法步骤
May 27 Python
Python自动化运维之Ansible定义主机与组规则操作详解
Jun 13 Python
nginx+uwsgi+django环境搭建的方法步骤
Nov 25 Python
使用pycharm和pylint检查python代码规范操作
Jun 09 Python
如何基于matlab相机标定导出xml文件
Nov 02 Python
python 生成正态分布数据,并绘图和解析
Dec 21 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/01/16 PHP
PHP+jQuery 注册模块开发详解
2014/10/14 PHP
phplot生成图片类用法详解
2015/01/06 PHP
实例讲解PHP表单验证功能
2019/02/15 PHP
使用PHP开发留言板功能
2019/11/19 PHP
jQuery页面滚动浮动层智能定位实例代码
2011/08/23 Javascript
js中创建对象的几种方式示例介绍
2014/01/26 Javascript
jQuery防止click双击多次提交及传递动态函数或多参数
2014/04/02 Javascript
node.js中的fs.openSync方法使用说明
2014/12/17 Javascript
jQuery下拉美化搜索表单效果代码分享
2015/08/25 Javascript
jQuery实现带有动画效果的回到顶部和底部代码
2015/11/04 Javascript
微信小程序  生命周期详解
2016/10/27 Javascript
原生js实现淘宝放大镜效果
2020/10/28 Javascript
ES6 对象的新功能与解构赋值介绍
2019/02/05 Javascript
layui动态渲染生成select的option值方法
2019/09/23 Javascript
通过实例了解JS 连续赋值
2019/09/24 Javascript
PyMongo安装使用笔记
2015/04/27 Python
用python写一个windows下的定时关机脚本(推荐)
2017/03/21 Python
Python 关于反射和类的特殊成员方法
2017/09/14 Python
Python面向对象实现一个对象调用另一个对象操作示例
2019/04/08 Python
python实现翻转棋游戏(othello)
2019/07/29 Python
Python数据正态性检验实现过程
2020/04/18 Python
Python pexpect模块及shell脚本except原理解析
2020/08/03 Python
利用CSS3制作简单的3d半透明立方体图片展示
2017/03/25 HTML / CSS
Html5 Canvas动画基础碰撞检测的实现
2018/12/06 HTML / CSS
加拿大时尚床上用品零售商:QE Home | Quilts Etc
2018/01/22 全球购物
回馈慈善的设计师太阳镜:DIFF eyewear
2019/10/17 全球购物
华为python面试题
2016/05/03 面试题
升职自荐书范文
2013/11/28 职场文书
搞笑获奖感言
2014/01/30 职场文书
淘宝店铺营销方案
2014/02/13 职场文书
《二泉映月》教学反思
2014/04/15 职场文书
艾滋病宣传活动总结
2014/05/08 职场文书
文明社区申报材料
2014/08/21 职场文书
教育局党的群众路线教育实践活动整改方案
2014/09/20 职场文书
简单聊一聊SQL注入及防止SQL注入
2022/03/23 MySQL