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 字典(Dictionary)操作详解
Mar 11 Python
python魔法方法-属性访问控制详解
Jul 25 Python
python 处理dataframe中的时间字段方法
Apr 10 Python
使用Python通过win32 COM打开Excel并添加Sheet的方法
May 02 Python
Python创建普通菜单示例【基于win32ui模块】
May 09 Python
python的pytest框架之命令行参数详解(上)
Jun 27 Python
Django之使用celery和NGINX生成静态页面实现性能优化
Oct 08 Python
Python爬虫之urllib基础用法教程
Oct 12 Python
python实现FTP文件传输的方法(服务器端和客户端)
Mar 20 Python
Python把图片转化为pdf代码实例
Jul 28 Python
python实现暗通道去雾算法的示例
Sep 27 Python
python 使用Tensorflow训练BP神经网络实现鸢尾花分类
May 12 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
在任意字符集下正常显示网页的方法二(续)
2007/04/01 PHP
php抓取页面与代码解析 推荐
2010/07/23 PHP
简单解决新浪SAE无法上传文件的问题
2015/05/13 PHP
ThinkPHP Where 条件中常用表达式示例(详解)
2017/03/31 PHP
PHP里面把16进制的图片数据显示在html的img标签上(实现方法)
2017/05/02 PHP
PHP htmlspecialchars() 函数实例代码及用法大全
2018/09/18 PHP
php和C#的yield迭代器实现方法对比分析
2019/07/17 PHP
Laravel Eloquent分表方法并使用模型关联的实现
2019/11/25 PHP
JavaScript实现动态增加文件域表单
2009/02/12 Javascript
JS正则验证邮箱的格式详细介绍
2013/11/19 Javascript
js下将阿拉伯数字每三位一逗号分隔(如:15000000转化为15,000,000)
2014/06/02 Javascript
JS实现滑动菜单效果代码(包括Tab,选项卡,横向等效果)
2015/09/24 Javascript
浅谈javascript 函数表达式和函数声明的区别
2016/01/05 Javascript
Bootstrap表格和栅格分页实例详解
2016/05/20 Javascript
require.js配合插件text.js实现最简单的单页应用程序
2016/07/12 Javascript
jstree的简单实例
2016/12/01 Javascript
详解使用路由延迟加载 Angular 模块
2017/10/12 Javascript
详解用webpack的CommonsChunkPlugin提取公共代码的3种方式
2017/11/09 Javascript
node的process以及child_process模块学习笔记
2018/03/06 Javascript
javascript实现评分功能
2020/06/24 Javascript
jQuery实现移动端扭蛋机抽奖
2020/11/08 jQuery
使用Python的Flask框架表单插件Flask-WTF实现Web登录验证
2016/07/12 Python
pandas.read_csv参数详解(小结)
2019/06/21 Python
python使用OpenCV模块实现图像的融合示例代码
2020/04/10 Python
Scrapy中如何向Spider传入参数的方法实现
2020/09/28 Python
CSS3 倾斜的网页图片库实例教程
2009/11/14 HTML / CSS
HTML5 Geolocation API的正确使用方法
2018/12/04 HTML / CSS
html5唤醒APP小记
2019/03/27 HTML / CSS
野兽派官方旗舰店:THE BEAST 野兽派
2016/08/05 全球购物
史泰博(Staples)中国官方网站:办公用品一站式采购
2016/09/05 全球购物
沪江旗下的海量优质课程平台:沪江网校
2017/11/07 全球购物
土木工程毕业生推荐信
2013/10/28 职场文书
2014年办公室主任工作总结
2014/11/12 职场文书
机关工会工作总结2015
2015/05/26 职场文书
Python OpenCV实现传统图片格式与base64转换
2021/06/13 Python