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修改注册表终止360进程实例
Oct 13 Python
python 简单的多线程链接实现代码
Aug 28 Python
Python入门_浅谈for循环、while循环
May 16 Python
python使用正则表达式的search()函数实现指定位置搜索功能
Nov 10 Python
python的Tqdm模块的使用
Jan 10 Python
python 对类的成员函数开启线程的方法
Jan 22 Python
python多线程分块读取文件
Aug 29 Python
FFT快速傅里叶变换的python实现过程解析
Oct 21 Python
python 装饰器的实际作用有哪些
Sep 07 Python
python 发送邮件的四种方法汇总
Dec 02 Python
python通过opencv调用摄像头操作实例分析
Jun 07 Python
Python编写冷笑话生成器
Apr 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 八种基本的数据类型小结
2011/06/01 PHP
PHP数据流应用的一个简单实例
2012/09/14 PHP
PHP面向对象——访问修饰符介绍
2012/11/08 PHP
PHP Static延迟静态绑定用法分析
2016/03/16 PHP
PHP的邮件群发系统phplist配置方法详细总结
2016/03/30 PHP
thinkphp中多表查询中防止数据重复的sql语句(必看)
2016/09/22 PHP
PHP实现的登录,注册及密码修改功能分析
2016/11/25 PHP
PHP学习记录之数组函数
2018/06/01 PHP
PHP全局使用Laravel辅助函数dd
2019/12/26 PHP
JavaScript页面刷新与弹出窗口问题的解决方法
2010/03/02 Javascript
xml转json的js代码
2012/08/28 Javascript
javascript仿qq界面的折叠菜单实现代码
2012/12/12 Javascript
JS实现清除指定cookies的方法
2014/09/20 Javascript
Jquery中使用show()与hide()方法动画显示和隐藏图片
2015/10/08 Javascript
ES6新数据结构Set与WeakSet用法分析
2017/03/31 Javascript
Layui数据表格跳转到指定页的实现方法
2019/09/05 Javascript
解决layer.msg 不居中 ifram中的问题
2019/09/05 Javascript
python实现字符串和日期相互转换的方法
2015/05/13 Python
python字典基本操作实例分析
2015/07/11 Python
python3中int(整型)的使用教程
2017/03/23 Python
Python 的类、继承和多态详解
2017/07/16 Python
python定向爬取淘宝商品价格
2018/02/27 Python
Jupyter notebook在mac:linux上的配置和远程访问的方法
2019/01/14 Python
对python 合并 累加两个dict的实例详解
2019/01/21 Python
PythonWeb项目Django部署在Ubuntu18.04腾讯云主机上
2019/04/01 Python
pytorch 预训练层的使用方法
2019/08/20 Python
Python如何操作office实现自动化及win32com.client的运用
2020/04/01 Python
使用Django清空数据库并重新生成
2020/04/03 Python
python语言time库和datetime库基本使用详解
2020/12/25 Python
以设计师精品品质提供快速时尚:Mostata
2019/05/10 全球购物
小学绿色学校申报材料
2014/08/23 职场文书
2015年党风廉政承诺书
2015/01/22 职场文书
2016党员干部反腐倡廉心得体会
2016/01/13 职场文书
React + Threejs + Swiper 实现全景图效果的完整代码
2021/06/28 Javascript
css实现两栏布局,左侧固定宽,右侧自适应的多种方法
2021/08/07 HTML / CSS
python三子棋游戏
2022/05/04 Python