【Python Network】分解DNS查询结果
针对DNS查询records,通过NS、PTR、CNAME和MX类别不同,返回数据将包含另外主机名。为了解最终的IP地址,通过将返回信息分解。继续使用PyDNS获取详细信息。
- #! /usr/bin/env python
- # DNS query program - Example 4 - DNSquery.py
- import sys, DNS, re, DNSany
- def getreverse(query):
- """ Given the query, returns an approciate reverse lookup string
- under IN-ADDR.ARPA if query is an IP address; otherwire, return
- None. This function is not IPv6-compatiable. """
- if re.search("^\d+.\d+.\d+.\d+$", query):
- octets = query.split('.')
- octets.reverse()
- return '.'.join(octets) + '.IN-ADDR.ADDR'
- return None
- def formatline(index, typename, descr, data):
- retval = "%-2s %-5s" % (index, typename)
- data = data.replace("\n", "\n ")
- if descr != None and len(descr):
- retval += " %-12s" % (descr + ":")
- return retval + " " + data
- DNS.DiscoverNameServers()
- queries = [(sys.argv[1], DNS.Type.ANY)]
- donequeries = []
- descriptions = {'A': 'IP address',
- 'TXT': 'Data',
- 'PTR': 'Host name',
- 'CNAME': 'Alias for',
- 'NS': 'Name server'}
- while len(queries):
- (query, qtype) = queries.pop(0)
- if query in donequeries:
- # Don't look up the same thing twice
- continue
- donequeries.append(query)
- print "-" * 77
- print "Results for %s (lookup type %s)" % (query, DNS.Type.typestr(qtype))
- rev = getreverse(query)
- if rev is not None:
- print "IP address given; doing reverse lookup using", rev
- query = rev
- answers = DNSany.nslookup(query, qtype, verbose = 0)
- if not len(answers):
- print "Not found"
- count = 0
- for answer in answers:
- count += 1
- if answer['typename'] == 'MX':
- print formatline(count, 'MX', 'Mail Server',
- "%s, priority %d" % (answer['data'][1], answer['data'][0]))
- queries.append((answer['data'][1], DNS.Type.A))
- elif answer['typename'] == 'SOA':
- data = "\n" + "\n".join(str(x) for x in answer['data'])
- print formatline(count, 'SOA', 'Start of authority', data)
- elif answer['typename'] in descriptions:
- print formatline(count, answer['typename'], descriptions[answer['typename']], str(answer['data']))
- else:
- print formatline(count, answer['typename'], None, str(answer['data']))
- if answer['typename'] in ['CNAME', 'PTR']:
- queries.append((answer['data'], DNS.Type.ANY))
- if answer['typename'] == 'NS':
- queries.append((answer['data'], DNS.Type.A))
以baidu.com为例,运行截图如下。
【Python Network】分解DNS查询结果的更多相关文章
- python dns查询与DNS传输漏洞查询
前言: 昨天晚上在看DNS协议,然后想到了 DNS传输漏洞.便想写一个DNS查询与DNS传输漏洞查询 DNS传输漏洞介绍: DNS传输漏洞:若DNS服务器配置不当,可能导致匿名用户获取某个域的所有记录 ...
- 基于nodejs的DNS查询工具
开始这个实例之前,我们简单谈一下Node.js吧,Node.js是一个由JavaScript书写而成的强大Web开发框架,它让开发强壮的.伸缩性良好的服务器端Web应用变得更加简单.容易.这种技术诞生 ...
- Java DNS查询内部实现
源码分析 在Java中,DNS相关的操作都是通过通过InetAddress提供的API实现的.比如查询域名对应的IP地址: String dottedQuadIpAddress = InetAddre ...
- Java内部DNS查询实现和参数设置
一.Java内部DNS查询 Java使用域名查询时,用的自己内部的域名实现机制,最后都是交给InetAddress去做DNS解析. 源码分析参考:http://blog.arganzheng.me/p ...
- 域名dns查询_查询域名dns ip地址
最近有部分用户反应管理的天气网站打开偏慢,决定从每一个可以出现的问题点查起!首先就是dns! 通过360dns监控对比发现,同一组域名,15tianqi.cn的dns响应时间比较长,在300-700间 ...
- 转载 DNS查询流程简介
转载请注明出处:http://blog.csdn.net/luotuo44/article/details/45545059 DNS(domain name system),读者们或多或少都听过,就是 ...
- Python 代码实现模糊查询
Python 代码实现模糊查询 1.导语: 模糊匹配可以算是现代编辑器(如 Eclipse 等各种 IDE)的一个必备特性了,它所做的就是根据用户输入的部分内容,猜测用户想要的文件名,并提供一个推荐列 ...
- python network programming tutorial
关于网络编程以及socket 等一些概念和函数介绍就不再重复了,这里示例性用python 编写客户端和服务器端. 一.最简单的客户端流程: 1. Create a socket 2. Connect ...
- DNS查询相关
本文同时发表在https://github.com/zhangyachen/zhangyachen.github.io/issues/45 一种简单的设计方式是在因特网上使用一个DNS服务器,该服务器 ...
随机推荐
- JavaScript高级程序设计(九):基本概念----函数
一.参数的理解 1.ECMAScript中的参数在内部是用一个数组来表示的.函数接收到的始终是这个数组,而不关心数组中包含多少个参数,即使没有参数也可以. 2.实质上,函数可以通过arguments对 ...
- Java教程——int与Integer的区别
首先说一下int和Integer的区别: int 是基本数据类型,Integer是int的包装类.注意:后者的类型是"类".例如使用泛型,List<Integer> n ...
- Oracle PL/SQL 多重选择句
Oracle中语句块的基本格式: declare --变量定义,初始化赋值. begin --变量的赋值,函数调用,if,while等. end: Oracle中的语句:关系运算符:= <> ...
- (poj)3159 Candies
题目链接:http://poj.org/problem?id=3159 Description During the kindergarten days, flymouse was the monit ...
- 解决rtl8723be无线网卡驱动频繁断网问题
买了新本子,用的是rtl8723be无线网卡,连WIFI时总是断网.Windows下好解决,Ubuntu下可就麻烦了,又是升级内核又是编译驱动的,折腾了一天,终于找到了解决办法: # echo &qu ...
- 转载:【高并发简单解决方案 | 靠谱崔小拽 】redis队列缓存 + mysql 批量入库 + php离线整合
需求背景:有个调用统计日志存储和统计需求,要求存储到mysql中:存储数据高峰能达到日均千万,瓶颈在于直接入库并发太高,可能会把mysql干垮. 问题分析 思考:应用网站架构的衍化过程中,应用最新的框 ...
- HTML5元素拖拽实现示例
HTML5现在前端圈中,已然成为一个不那么新的技术词汇了,很多公司也把HTML5也当成了硬性的技能要求,但是很多前端恐怕都不了解HTML5的拖拽怎么实现吧. 看了下极客学院的视频,大概的了解了下思路. ...
- 11个有用的Linux命令
Linux命令行吸引了大多数Linux爱好者.一个正常的Linux用户一般掌握大约50-60个命令来处理每日的任务.今天为你解释下面几个命令:sudo.python.mtr.Ctrl+x+e.nl.s ...
- vb delphi7、2010 csharp vb.net空白测试程序
工作中难免在网上看到一段不错的代码,希望能够拿来测试一次,为了避免每次测试都要新建一个空白测试程序,索性预先建立好,要用的时候复制一遍,然后打开直接粘贴需要测试的代码进行测试.
- Python解析生成XML-ElementTree VS minidom
OS:Windows 7 关键字:Python3.4,XML,ElementTree,minidom 本文介绍用Python解析生成以下XML: <Persons> <Person& ...