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实现一个简单的项目监控
Mar 31 Python
在Python中利用Pandas库处理大数据的简单介绍
Apr 07 Python
利用Python开发实现简单的记事本
Nov 15 Python
一个基于flask的web应用诞生 记录用户账户登录状态(6)
Apr 11 Python
PyCharm的设置方法和第一个Python程序的建立
Jan 16 Python
Pandas中resample方法详解
Jul 02 Python
Python正则表达式匹配数字和小数的方法
Jul 03 Python
python3.6 tkinter实现屏保小程序
Jul 30 Python
在Pytorch中使用样本权重(sample_weight)的正确方法
Aug 17 Python
python实现人脸签到系统
Apr 13 Python
如何用Matplotlib 画三维图的示例代码
Jul 28 Python
python基础之错误和异常处理
Oct 24 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
Apache启动报错No space left on device: AH00023该怎么解决
2015/10/16 PHP
PHP实现的回溯算法示例
2017/08/15 PHP
尽可能写"友好"的"Javascript"代码
2007/01/09 Javascript
JQuery 表格操作(交替显示、拖动表格行、选择行等)
2009/07/29 Javascript
javascript高级学习笔记整理
2011/08/14 Javascript
js滑动提示效果代码分享
2016/03/10 Javascript
JavaScript必看小技巧(必看)
2016/06/07 Javascript
JQuery之proxy实现绑定代理方法
2016/08/01 Javascript
js使用Replace结合正则替换重复出现的字符串功能示例
2016/12/27 Javascript
d3.js入门教程之数据绑定详解
2017/04/28 Javascript
详解webpack之scss和postcss-loader的配置
2018/01/09 Javascript
微信小程序实现倒计时补零功能
2018/07/09 Javascript
分享vue里swiper的一些坑
2018/08/30 Javascript
JS通用方法触发点击事件代码实例
2020/02/17 Javascript
Element Breadcrumb 面包屑的使用方法
2020/07/26 Javascript
Python 包含汉字的文件读写之每行末尾加上特定字符
2016/12/12 Python
CentOS 7下安装Python 3.5并与Python2.7兼容并存详解
2017/07/07 Python
python的exec、eval使用分析
2017/12/11 Python
python使用Tkinter实现在线音乐播放器
2018/01/30 Python
python实现比较文件内容异同
2018/06/22 Python
python实现求两个字符串的最长公共子串方法
2018/07/20 Python
在Python中通过threshold创建mask方式
2020/02/19 Python
详解django中Template语言
2020/02/22 Python
Python3 hashlib密码散列算法原理详解
2020/03/30 Python
Python StringIO及BytesIO包使用方法解析
2020/06/15 Python
Pycharm Available Package无法显示/安装包的问题Error Loading Package List解决
2020/09/18 Python
使用CSS3来制作消息提醒框
2015/07/12 HTML / CSS
Otticanet美国:最顶尖的世界名牌眼镜, 能得到打折季的价格
2019/03/10 全球购物
一加手机美国官方网站:OnePlus美国
2019/09/19 全球购物
iHerb俄罗斯:维生素、补品和天然产品
2020/07/09 全球购物
经典的班主任推荐信
2013/10/28 职场文书
电子商务专业应届生求职信
2014/05/28 职场文书
实习指导老师意见
2015/06/04 职场文书
关于法制教育的宣传语
2015/07/13 职场文书
redis限流的实际应用
2021/04/24 Redis
python playwright之元素定位示例详解
2022/07/23 Python