前段时间有个需求是要求查一段时间的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日志并对受访域名排行相关推荐

  1. python代码进去docker容器内_python脚本监控docker容器

    本文实例为大家分享了python脚本监控docker容器的方法,供大家参考,具体内容如下 脚本功能: 1.监控CPU使用率 2.监控内存使用状况 3.监控网络流量 具体代码: #!/usr/bin/e ...

  2. python用一行代码编写一个回声程序_Python源码分析2 - 一个简单的Python程序的执行...

    本文主要通过跟踪一个非常简单的Python程序的执行,简单讨论Python实现的基本框架和结构. 要执行Python程序如下,功能非常简单:从1加到10再打印出来 # test program sum ...

  3. python代码大全和用法用量_Python生成器的使用方法和示例代码

    本文是<Effect Python 编写高质量Python代码的59个有效方法>的学习笔记.主要记录生成器的使用方法和示例代码. 返回队列的函数 如果函数要产生一系列结果,那么最简单的做法 ...

  4. python代码怎么换行继续写_python代码太长怎么换行

    在需要换行的代码后面加一个 / 回车 python怎么换行啊??我是一只崭新的程序猿...在学python..下了3.4,,,打开IDLE是个白其实我想喷上面,但是出于理智,他可能是没理解你的意思或者 ...

  5. python代码封装供第三方使用_python发博客

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! python生成csdn博客分享图一.前言我们分享博客的方式有很多种,最常见的无 ...

  6. python代码解释4个作用域_Python中作用域的深入讲解

    前言 作用域是指变量的生效范围,例如本地变量.全局变量描述的就是不同的生效范围. python的变量作用域的规则非常简单,可以说是所有语言中最直观.最容易理解的作用域. 在开始介绍作用域之前,先抛一个 ...

  7. python代码运行不了怎么办_Python编程之运行出错怎么办

    程序运行错误大概是每个程序员都可能会遇到的问题,就算是再仔细的人,也会有失误的时候.Python编程同样如此,这是一种面向对象的程序设计语言,主要服务于人工智能领域,也是现在小孩子学编程比较热门的选择 ...

  8. python代码说明文档怎么写_Python写完代码怎么用

    Python写完代码怎么用 python运行有两种方式,一种是在python交互式命令行下运行:另一种是使用文本编辑器,在命令行中直接运行. 一.命令行与交互式命令行 首先要搞清楚这个命令行的概念. ...

  9. python代码大全心形盒子简单_python心形代码

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 之前看到python一行代码就可以在控制台打印心形,感觉非常神奇,昨天突然想起来 ...

  10. python代码如何做成应用程序_Python的源代码如何转成可以执行的应用程序?

    一.安装pyinstaller 如果你用的是pycarm,直接在setting里面找到pyinstaller的库安装即可. 有一点要注意的是,并非所有的python都支持pyinstaller,目前的 ...

最新文章

  1. 爬虫书籍-Python网络爬虫权威指南OCR库 NLTK 数据清洗 BeautifulSoup Lambda表达式 Scrapy 马尔可夫模型
  2. RPi 2B UART作为调试口或者普通串口
  3. XenDesktop中无法删除虚拟机
  4. 配置Eclipse中的Maven环境
  5. java方法参数类型不确定_一个Java方法能有多少个参数类型?这个好奇coder做了个实验...
  6. 解决vue项目在ie浏览器中不显示的问题
  7. BetterZip使用教程分享:Mac用户如何提取压缩文件?
  8. 《团队软件过程(修订版)》—第1章1.5节TSPi过程
  9. pycharm 设置虚拟工作空间_七、连Pycharm都不知道怎么用,学什么Python
  10. 如何区分abcd类地址_ip地址abc类怎么区分
  11. 转置矩阵,矩阵的行列式,伴随矩阵,逆矩阵的概念及C#求解
  12. Android开发——数据库框架Suger遇到的大坑(Gson和Suger的复用Bean请见“大坑三”)
  13. hive reduce
  14. CC(标准)版D碟收藏指南(四)
  15. autosar—com模块
  16. 802.11ax分析1---IEEE 802.11ax和IEEE 802.11ac性能对比
  17. 宜宾市放心舒心消费平台-工商GIS一张图
  18. ERP编制物料清单 金蝶
  19. dede 取消推荐文章加粗
  20. java判断当前时间在某个时间段内

热门文章

  1. ubuntu安装翻译软件 stardict
  2. 小学计算机课题研究报告,小学信息技术自主学习方法探究研究课题研究报告
  3. Java总结一:初窥线程
  4. 飞桨PaddlePaddle 英特尔神经计算棒 联合优化AI算法CPU部署性能,推动产业低成本智能化升级
  5. golang struct数组排序_go语言中排序sort的使用方法示例
  6. 干货!推荐系统中的异构关系学习
  7. 嵌入式ARM之基于S5P6818平台移植Qt5.5、FFTW、QWT--图文教程
  8. 字节跳动实习生转正工资_字节跳动西瓜视频招聘 | 新媒体运营实习生
  9. flutter,ios测试用户安装app提示“无法安装此app,因为无法验证其完整性”
  10. 【第二周】吴恩达团队AI for Medical Diagnosis大作业