针对DNS查询records,通过NS、PTR、CNAME和MX类别不同,返回数据将包含另外主机名。为了解最终的IP地址,通过将返回信息分解。继续使用PyDNS获取详细信息。

  1. #! /usr/bin/env python
  2. # DNS query program - Example 4 - DNSquery.py
  3.  
  4. import sys, DNS, re, DNSany
  5.  
  6. def getreverse(query):
  7. """ Given the query, returns an approciate reverse lookup string
  8. under IN-ADDR.ARPA if query is an IP address; otherwire, return
  9. None. This function is not IPv6-compatiable. """
  10. if re.search("^\d+.\d+.\d+.\d+$", query):
  11. octets = query.split('.')
  12. octets.reverse()
  13. return '.'.join(octets) + '.IN-ADDR.ADDR'
  14. return None
  15.  
  16. def formatline(index, typename, descr, data):
  17. retval = "%-2s %-5s" % (index, typename)
  18. data = data.replace("\n", "\n ")
  19. if descr != None and len(descr):
  20. retval += " %-12s" % (descr + ":")
  21. return retval + " " + data
  22.  
  23. DNS.DiscoverNameServers()
  24. queries = [(sys.argv[1], DNS.Type.ANY)]
  25. donequeries = []
  26. descriptions = {'A': 'IP address',
  27. 'TXT': 'Data',
  28. 'PTR': 'Host name',
  29. 'CNAME': 'Alias for',
  30. 'NS': 'Name server'}
  31.  
  32. while len(queries):
  33. (query, qtype) = queries.pop(0)
  34. if query in donequeries:
  35. # Don't look up the same thing twice
  36. continue
  37. donequeries.append(query)
  38. print "-" * 77
  39. print "Results for %s (lookup type %s)" % (query, DNS.Type.typestr(qtype))
  40. print
  41. rev = getreverse(query)
  42. if rev is not None:
  43. print "IP address given; doing reverse lookup using", rev
  44. query = rev
  45.  
  46. answers = DNSany.nslookup(query, qtype, verbose = 0)
  47. if not len(answers):
  48. print "Not found"
  49.  
  50. count = 0
  51. for answer in answers:
  52. count += 1
  53. if answer['typename'] == 'MX':
  54. print formatline(count, 'MX', 'Mail Server',
  55. "%s, priority %d" % (answer['data'][1], answer['data'][0]))
  56. queries.append((answer['data'][1], DNS.Type.A))
  57. elif answer['typename'] == 'SOA':
  58. data = "\n" + "\n".join(str(x) for x in answer['data'])
  59. print formatline(count, 'SOA', 'Start of authority', data)
  60. elif answer['typename'] in descriptions:
  61. print formatline(count, answer['typename'], descriptions[answer['typename']], str(answer['data']))
  62. else:
  63. print formatline(count, answer['typename'], None, str(answer['data']))
  64.  
  65. if answer['typename'] in ['CNAME', 'PTR']:
  66. queries.append((answer['data'], DNS.Type.ANY))
  67. if answer['typename'] == 'NS':
  68. queries.append((answer['data'], DNS.Type.A))

以baidu.com为例,运行截图如下。


【Python Network】分解DNS查询结果的更多相关文章

  1. python dns查询与DNS传输漏洞查询

    前言: 昨天晚上在看DNS协议,然后想到了 DNS传输漏洞.便想写一个DNS查询与DNS传输漏洞查询 DNS传输漏洞介绍: DNS传输漏洞:若DNS服务器配置不当,可能导致匿名用户获取某个域的所有记录 ...

  2. 基于nodejs的DNS查询工具

    开始这个实例之前,我们简单谈一下Node.js吧,Node.js是一个由JavaScript书写而成的强大Web开发框架,它让开发强壮的.伸缩性良好的服务器端Web应用变得更加简单.容易.这种技术诞生 ...

  3. Java DNS查询内部实现

    源码分析 在Java中,DNS相关的操作都是通过通过InetAddress提供的API实现的.比如查询域名对应的IP地址: String dottedQuadIpAddress = InetAddre ...

  4. Java内部DNS查询实现和参数设置

    一.Java内部DNS查询 Java使用域名查询时,用的自己内部的域名实现机制,最后都是交给InetAddress去做DNS解析. 源码分析参考:http://blog.arganzheng.me/p ...

  5. 域名dns查询_查询域名dns ip地址

    最近有部分用户反应管理的天气网站打开偏慢,决定从每一个可以出现的问题点查起!首先就是dns! 通过360dns监控对比发现,同一组域名,15tianqi.cn的dns响应时间比较长,在300-700间 ...

  6. 转载 DNS查询流程简介

    转载请注明出处:http://blog.csdn.net/luotuo44/article/details/45545059 DNS(domain name system),读者们或多或少都听过,就是 ...

  7. Python 代码实现模糊查询

    Python 代码实现模糊查询 1.导语: 模糊匹配可以算是现代编辑器(如 Eclipse 等各种 IDE)的一个必备特性了,它所做的就是根据用户输入的部分内容,猜测用户想要的文件名,并提供一个推荐列 ...

  8. python network programming tutorial

    关于网络编程以及socket 等一些概念和函数介绍就不再重复了,这里示例性用python 编写客户端和服务器端. 一.最简单的客户端流程: 1. Create a socket 2. Connect ...

  9. DNS查询相关

    本文同时发表在https://github.com/zhangyachen/zhangyachen.github.io/issues/45 一种简单的设计方式是在因特网上使用一个DNS服务器,该服务器 ...

随机推荐

  1. JavaScript高级程序设计(九):基本概念----函数

    一.参数的理解 1.ECMAScript中的参数在内部是用一个数组来表示的.函数接收到的始终是这个数组,而不关心数组中包含多少个参数,即使没有参数也可以. 2.实质上,函数可以通过arguments对 ...

  2. Java教程——int与Integer的区别

    首先说一下int和Integer的区别: int 是基本数据类型,Integer是int的包装类.注意:后者的类型是"类".例如使用泛型,List<Integer> n ...

  3. Oracle PL/SQL 多重选择句

    Oracle中语句块的基本格式: declare --变量定义,初始化赋值. begin --变量的赋值,函数调用,if,while等. end: Oracle中的语句:关系运算符:= <> ...

  4. (poj)3159 Candies

    题目链接:http://poj.org/problem?id=3159 Description During the kindergarten days, flymouse was the monit ...

  5. 解决rtl8723be无线网卡驱动频繁断网问题

    买了新本子,用的是rtl8723be无线网卡,连WIFI时总是断网.Windows下好解决,Ubuntu下可就麻烦了,又是升级内核又是编译驱动的,折腾了一天,终于找到了解决办法: # echo &qu ...

  6. 转载:【高并发简单解决方案 | 靠谱崔小拽 】redis队列缓存 + mysql 批量入库 + php离线整合

    需求背景:有个调用统计日志存储和统计需求,要求存储到mysql中:存储数据高峰能达到日均千万,瓶颈在于直接入库并发太高,可能会把mysql干垮. 问题分析 思考:应用网站架构的衍化过程中,应用最新的框 ...

  7. HTML5元素拖拽实现示例

    HTML5现在前端圈中,已然成为一个不那么新的技术词汇了,很多公司也把HTML5也当成了硬性的技能要求,但是很多前端恐怕都不了解HTML5的拖拽怎么实现吧. 看了下极客学院的视频,大概的了解了下思路. ...

  8. 11个有用的Linux命令

    Linux命令行吸引了大多数Linux爱好者.一个正常的Linux用户一般掌握大约50-60个命令来处理每日的任务.今天为你解释下面几个命令:sudo.python.mtr.Ctrl+x+e.nl.s ...

  9. vb delphi7、2010 csharp vb.net空白测试程序

    工作中难免在网上看到一段不错的代码,希望能够拿来测试一次,为了避免每次测试都要新建一个空白测试程序,索性预先建立好,要用的时候复制一遍,然后打开直接粘贴需要测试的代码进行测试.

  10. Python解析生成XML-ElementTree VS minidom

    OS:Windows 7 关键字:Python3.4,XML,ElementTree,minidom 本文介绍用Python解析生成以下XML: <Persons> <Person& ...