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编写屏幕截图程序方法
Feb 18 Python
Python 数据结构之堆栈实例代码
Jan 22 Python
python中文分词教程之前向最大正向匹配算法详解
Nov 02 Python
详解Django中六个常用的自定义装饰器
Jul 04 Python
win10系统下Anaconda3安装配置方法图文教程
Sep 19 Python
详解使用PyInstaller将Pygame库编写的小游戏程序打包为exe文件
Aug 23 Python
Python如何实现动态数组
Nov 02 Python
Python定义函数时参数有默认值问题解决
Dec 19 Python
python字符串常用方法及文件简单读写的操作方法
Mar 04 Python
Anaconda+vscode+pytorch环境搭建过程详解
May 25 Python
简单介绍Python的第三方库yaml
Jun 18 Python
Python采集壁纸并实现炫轮播
Apr 30 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作的文本留言本的例子(三)
2006/10/09 PHP
用PHP来写记数器(详细介绍)
2006/10/09 PHP
Yii数据模型中rules类验证器用法分析
2016/07/15 PHP
PHP+原生态ajax实现的省市联动功能详解
2017/08/15 PHP
PHP全局使用Laravel辅助函数dd
2019/12/26 PHP
jqPlot 图表中文API使用文档及源码和在线示例
2012/02/07 Javascript
javascript学习(一)构建自己的JS库
2013/01/02 Javascript
js中string转int把String类型转化成int类型
2014/08/13 Javascript
JS的location.href跳出框架打开新页面的方法
2014/09/04 Javascript
提高jQuery性能优化的技巧
2015/08/03 Javascript
onmouseover事件和onmouseout事件全面理解
2016/08/15 Javascript
JavaScript和jQuery获取input框的绝对位置实现方法
2016/10/13 Javascript
jquery实现图片切换代码
2016/10/13 Javascript
原生js实现放大镜效果
2017/01/11 Javascript
vue2.0 实现导航守卫的具体用法(路由守卫)
2018/05/17 Javascript
jQuery实现表单动态添加数据并提交的方法
2018/07/19 jQuery
详解如何在vscode里面调试js和node.js的方法步骤
2018/12/24 Javascript
Vue Echarts实现可视化世界地图代码实例
2019/05/07 Javascript
vue实现数据控制视图的原理解析
2020/01/07 Javascript
vue css 引入asstes中的图片无法显示的四种解决方法
2020/03/16 Javascript
easyUI 实现的后台分页与前台显示功能示例
2020/06/01 Javascript
nestjs返回给前端数据格式的封装实现
2021/02/22 Javascript
python使用PythonMagick将jpg图片转换成ico图片的方法
2015/03/26 Python
Python实现模拟登录及表单提交的方法
2015/07/25 Python
动感网页相册 python编写简单文件夹内图片浏览工具
2016/08/17 Python
浅谈python numpy中nonzero()的用法
2018/04/02 Python
Python3导入CSV文件的实例(跟Python2有些许的不同)
2018/06/22 Python
python实现异常信息堆栈输出到日志文件
2019/12/26 Python
python Matplotlib数据可视化(2):详解三大容器对象与常用设置
2020/09/30 Python
python中常用的数据结构介绍
2021/01/12 Python
Agoda.com官方网站:便宜预订全球酒店,高达80%的折扣
2018/04/04 全球购物
澳大利亚购买最佳炊具品牌网站:Cookware Brands
2019/02/16 全球购物
在数据文件自动增长时,自动增长是否会阻塞对文件的更新
2014/05/01 面试题
物流合作计划书
2014/01/10 职场文书
小学班级标语口号大全
2015/12/26 职场文书
Go语言编译原理之变量捕获
2022/08/05 Golang