python代码使用dns进行调试_python脚本实现分析dns日志并对受访域名排行
前段时间有个需求是要求查一段时间的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.执行
说了大半天了,还是先跑下看看效果吧。
可以看出正常输出了top20的域名。
4.总结:
大致实现了相应的要求,只是很多的文件处理的不大好。例如采用正规去过滤时间段,在数据量很大的情况下会对性能有影响。同时感谢同事,最后的字典的排序方法我是抄他的,感谢个~
本文标题: python脚本实现分析dns日志并对受访域名排行
本文地址: http://www.cppcns.com/jiaoben/python/113853.html
python代码使用dns进行调试_python脚本实现分析dns日志并对受访域名排行相关推荐
- python代码进去docker容器内_python脚本监控docker容器
本文实例为大家分享了python脚本监控docker容器的方法,供大家参考,具体内容如下 脚本功能: 1.监控CPU使用率 2.监控内存使用状况 3.监控网络流量 具体代码: #!/usr/bin/e ...
- python用一行代码编写一个回声程序_Python源码分析2 - 一个简单的Python程序的执行...
本文主要通过跟踪一个非常简单的Python程序的执行,简单讨论Python实现的基本框架和结构. 要执行Python程序如下,功能非常简单:从1加到10再打印出来 # test program sum ...
- python代码大全和用法用量_Python生成器的使用方法和示例代码
本文是<Effect Python 编写高质量Python代码的59个有效方法>的学习笔记.主要记录生成器的使用方法和示例代码. 返回队列的函数 如果函数要产生一系列结果,那么最简单的做法 ...
- python代码怎么换行继续写_python代码太长怎么换行
在需要换行的代码后面加一个 / 回车 python怎么换行啊??我是一只崭新的程序猿...在学python..下了3.4,,,打开IDLE是个白其实我想喷上面,但是出于理智,他可能是没理解你的意思或者 ...
- python代码封装供第三方使用_python发博客
广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! python生成csdn博客分享图一.前言我们分享博客的方式有很多种,最常见的无 ...
- python代码解释4个作用域_Python中作用域的深入讲解
前言 作用域是指变量的生效范围,例如本地变量.全局变量描述的就是不同的生效范围. python的变量作用域的规则非常简单,可以说是所有语言中最直观.最容易理解的作用域. 在开始介绍作用域之前,先抛一个 ...
- python代码运行不了怎么办_Python编程之运行出错怎么办
程序运行错误大概是每个程序员都可能会遇到的问题,就算是再仔细的人,也会有失误的时候.Python编程同样如此,这是一种面向对象的程序设计语言,主要服务于人工智能领域,也是现在小孩子学编程比较热门的选择 ...
- python代码说明文档怎么写_Python写完代码怎么用
Python写完代码怎么用 python运行有两种方式,一种是在python交互式命令行下运行:另一种是使用文本编辑器,在命令行中直接运行. 一.命令行与交互式命令行 首先要搞清楚这个命令行的概念. ...
- python代码大全心形盒子简单_python心形代码
广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 之前看到python一行代码就可以在控制台打印心形,感觉非常神奇,昨天突然想起来 ...
- python代码如何做成应用程序_Python的源代码如何转成可以执行的应用程序?
一.安装pyinstaller 如果你用的是pycarm,直接在setting里面找到pyinstaller的库安装即可. 有一点要注意的是,并非所有的python都支持pyinstaller,目前的 ...
最新文章
- 爬虫书籍-Python网络爬虫权威指南OCR库 NLTK 数据清洗 BeautifulSoup Lambda表达式 Scrapy 马尔可夫模型
- RPi 2B UART作为调试口或者普通串口
- XenDesktop中无法删除虚拟机
- 配置Eclipse中的Maven环境
- java方法参数类型不确定_一个Java方法能有多少个参数类型?这个好奇coder做了个实验...
- 解决vue项目在ie浏览器中不显示的问题
- BetterZip使用教程分享:Mac用户如何提取压缩文件?
- 《团队软件过程(修订版)》—第1章1.5节TSPi过程
- pycharm 设置虚拟工作空间_七、连Pycharm都不知道怎么用,学什么Python
- 如何区分abcd类地址_ip地址abc类怎么区分
- 转置矩阵,矩阵的行列式,伴随矩阵,逆矩阵的概念及C#求解
- Android开发——数据库框架Suger遇到的大坑(Gson和Suger的复用Bean请见“大坑三”)
- hive reduce
- CC(标准)版D碟收藏指南(四)
- autosar—com模块
- 802.11ax分析1---IEEE 802.11ax和IEEE 802.11ac性能对比
- 宜宾市放心舒心消费平台-工商GIS一张图
- ERP编制物料清单 金蝶
- dede 取消推荐文章加粗
- java判断当前时间在某个时间段内
热门文章
- ubuntu安装翻译软件 stardict
- 小学计算机课题研究报告,小学信息技术自主学习方法探究研究课题研究报告
- Java总结一:初窥线程
- 飞桨PaddlePaddle 英特尔神经计算棒 联合优化AI算法CPU部署性能,推动产业低成本智能化升级
- golang struct数组排序_go语言中排序sort的使用方法示例
- 干货!推荐系统中的异构关系学习
- 嵌入式ARM之基于S5P6818平台移植Qt5.5、FFTW、QWT--图文教程
- 字节跳动实习生转正工资_字节跳动西瓜视频招聘 | 新媒体运营实习生
- flutter,ios测试用户安装app提示“无法安装此app,因为无法验证其完整性”
- 【第二周】吴恩达团队AI for Medical Diagnosis大作业