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之关于类的初步认识
Oct 11 Python
使用Python生成随机密码的示例分享
Feb 18 Python
巧用python和libnmapd,提取Nmap扫描结果
Aug 23 Python
Python科学计算之NumPy入门教程
Jan 15 Python
Python用imghdr模块识别图片格式实例解析
Jan 11 Python
Python实现PS滤镜的万花筒效果示例
Jan 23 Python
强悍的Python读取大文件的解决方案
Feb 16 Python
python判断文件夹内是否存在指定后缀文件的实例
Jun 10 Python
python使用多线程编写tcp客户端程序
Sep 02 Python
python能做哪些生活有趣的事情
Sep 09 Python
Python Pygame实现俄罗斯方块
Feb 19 Python
python爬虫scrapy框架的梨视频案例解析
Feb 20 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设计模式 Command(命令模式)
2011/06/26 PHP
thinkphp中字符截取函数msubstr()用法分析
2016/01/09 PHP
php强大的时间转换函数strtotime
2016/02/18 PHP
PHP 自动加载的简单实现(推荐)
2016/08/12 PHP
浅谈PHP的数据库接口和技术
2016/12/09 PHP
thinkPHP5.0框架安装教程
2017/03/25 PHP
JAVASCRIPT  THIS详解 面向对象
2009/03/25 Javascript
比较简单的异步加载JS文件的代码
2009/07/18 Javascript
[将免费进行到底]在Amazon的一年免费服务器上安装Node.JS, NPM和OurJS博客
2014/08/18 Javascript
JS实用的带停顿的逐行文本循环滚动效果实例
2016/11/23 Javascript
vue-cli中的babel配置文件.babelrc实例详解
2018/02/22 Javascript
vue打包的时候自动将px转成rem的操作方法
2018/06/20 Javascript
详解解决使用axios发送json后台接收不到的问题
2018/06/27 Javascript
JS原生带缩略图的图片切换效果
2018/10/10 Javascript
如何获取vue单文件自身源码路径
2019/05/06 Javascript
JS实现音量控制拖动
2020/01/15 Javascript
阿望教你用vue写扫雷小游戏
2020/01/20 Javascript
echarts.js 动态生成多个图表 使用vue封装组件操作
2020/07/19 Javascript
浅析Python 中整型对象存储的位置
2016/05/16 Python
基础的十进制按位运算总结与在Python中的计算示例
2016/06/28 Python
如何利用Fabric自动化你的任务
2016/10/20 Python
python 实现tar文件压缩解压的实例详解
2017/08/20 Python
Python中join函数简单代码示例
2018/01/09 Python
Python3 执行系统命令并获取实时回显功能
2019/07/09 Python
利用Python实现kNN算法的代码
2019/08/16 Python
Python基于QQ邮箱实现SSL发送
2020/04/26 Python
python实现猜拳游戏项目
2020/11/30 Python
CSS3 完美实现圆角效果
2009/07/13 HTML / CSS
茵宝(Umbro)英国官方商店:英国足球服装生产商
2016/12/29 全球购物
活动邀请函范文
2014/01/19 职场文书
百货商场楼层班组长竞聘书
2014/03/31 职场文书
2015年企业工作总结范文
2015/04/28 职场文书
小学生手册家长意见
2015/06/03 职场文书
详解CSS伪元素的妙用单标签之美
2021/05/25 HTML / CSS
什么是css原子化,有什么用?
2022/04/24 HTML / CSS
windows系统安装配置nginx环境
2022/06/28 Servers