如果PyDNS库,跳过本地名称服务器,直接向权威名称服务器查询。如baidu.com查询.com域名服务器,并从各个域名服务器中查询下一即域名,并输出相关信息。

#! /usr/bin/env python
# Expanded DNS library example - Chapter 4 - DNSany.py import sys, DNS def hierquery(qstring, qtype):
"""Given a query type qtype, returns answers of that type for lookup
qstring. If no answers are found, removes the most specific component
(the part before the leftmost period) and retries the query with the result.
If the topmost query fails, returns None. """
reqobj = DNS.Request()
try:
answerobj = reqobj.req(name=qstring, qtype=qtype)
answers = [x['data'] for x in answerobj.answers if x['type']==qtype]
except DNS.Base.DNSError:
answers = []
if len(answers):
return answers
else:
remainder = qstring.split(".", 1);
if len(remainder) == 1:
return None
else:
return hierquery(remainder[1], qtype) def findnameservers(hostname):
"""Attempts to determine the authoritative nameservers for a given
hostname, Returns None on failure. """
return hierquery(hostname, DNS.Type.NS) def getrecordsfromnameserver(qstring, qtype, nslist):
"""Given a list of nameservers in nslist, executes the query requested
by qstring and qtype on each in order, returning the data from the
first server that returned 1 or more answers. If no server returned
any answers, return []. """
for ns in nslist:
reqobj = DNS.Request(server = ns)
try:
answers = reqobj.req(name=qstring, qtype=qtype).answers
if len(answers):
return answers
except DNS.Base.DNSError:
pass
return [] def nslookup(qstring, qtype, verbose = -1):
nslist = findnameservers(qstring)
if nslist is None:
raise RuntimeError, "Could not find nameserver to use."
if verbose:
print "Using nameservers:", ", ".join(nslist)
return getrecordsfromnameserver(qstring, qtype, nslist) if __name__ == "__main__":
query = sys.argv[1]
DNS.DiscoverNameServers() answers = nslookup(query, DNS.Type.ANY)
if not len(answers):
print "Not found."
for item in answers:
print "%-5s %s" % (item['typename'], item['data'])

运行结果如图所示:

【Python Network】权威域名服务器级联查询的更多相关文章

  1. 【Python Network】分解DNS查询结果

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

  2. DNS(一)之禁用权威域名服务器递归解析

    DNS dns是互联网中最核心的带层级的分布式系统,负责把域名解析成ip,把IP解析出域名,以及宣告邮件路由信息等等,使得使用域名访问网站,收发邮件成了可能. bind(berkeley Intern ...

  3. Oracle级联查询

    在ORACLE 数据库中有一种方法可以实现级联查询   select  *                //要查询的字段 from table              //具有子接点ID与父接点I ...

  4. Mybatis 级联查询 (一对多 )

    后台系统中 涉及到添加试卷 问题 答案的一个模块的.我需要通过试卷 查询出所有的试题,以及试题的答案.这个主要要使用到Mybatis的级联查询. 通过试卷 查询出与该试卷相关的试题(一对多),查询出试 ...

  5. python network programming tutorial

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

  6. Mybatis 之级联查询 一对多配置

    Mybatis级联 查询相对于hibenate是有点麻烦,但是相应好处也是有的,Mybatis轻量.根据自己要的字段配置方便 一对多配置用   <collection property=&quo ...

  7. 三级级联查询省份名称和编码(保证名称不重复)的SQL语句

    三级级联查询省份名称和编码(保证名称不重复)的SQL语句 1.省份.地市和县级数据库表 2.SQL语句 SELECT DISTINCT t.`province_name`,t.`province_co ...

  8. oracle使用connect by进行级联查询 树型菜单

    Oracle使用connect by进行级联查询 树型菜单(转) connect by可以用于级联查询,常用于对具有树状结构的记录查询某一节点的所有子孙节点或所有祖辈节点. 来看一个示例,现假设我们拥 ...

  9. 使用cglib实现数据库框架的级联查询

    写在前面的 这一章是之前写的<手把手教你写一个Java的orm框架> 的追加内容.因为之前写的数据库框架不支持级联查询这个操作,对于有关联关系的表用起来还是比较麻烦,于是就准备把这个功能给 ...

随机推荐

  1. Js中找任意对象的原型方法及改造原型

    Java中有运行时类型识别,js可以很方便的模仿这个特性,因为所有js对象都有一个属性constructor(构造器),表示这个对象的构造方法,原型与构造方法同名,所以可以通过这儿知道任意对象的原型名 ...

  2. 无法连接到已配置的开发web服务器

    http://jingyan.baidu.com/article/29697b91099847ab20de3c8b.html 这是防火墙造成的,将防火墙关闭即可

  3. 三十一、【WCF路由中间件】WCFHosting服务主机的路由器与负载均衡和实现思路

    回<[开源]EFW框架系列文章索引> EFW框架源代码下载V1.3:http://pan.baidu.com/s/1c0dADO0 EFW框架实例源代码下载:http://pan.baid ...

  4. [Issue]repo/repo init-解决同步源码Cannot get http://gerrit.googlesource.com/git-repo/clone.bundle

    1. 前两天想搭建freescale L3.0.35_4.1.0_BSP包,结果LTIB环境搭建好,也编译出rootfs/uboot/kernel的Image了,但是准备移植uboot的时候发现ubo ...

  5. js实现对身份证校验

    var vcity={ 11:"北京",12:"天津",13:"河北",14:"山西",15:"内蒙古&quo ...

  6. MVC页面上多个提交按钮提交到不同的Action

    使用mvc扩展类,ActionNameAttribute方法如下: [AttributeUsage(AttributeTargets.Method, AllowMultiple = false, In ...

  7. [原]逆向iOS SDK -- “添加本地通知”的流程分析

    观点: 代码面前没有秘密 添加通知的 Demo 代码 - (void)scheduleOneLocalNotification { [[UIApplication sharedApplication] ...

  8. python基础-------函数(三)

    迭代器 一.迭代的概念 迭代:1 重复2 下一次重复是基于上一次的结果 l=['a','b','c','d'] count=0while count < len(l): print(l[coun ...

  9. python绘制图

    如何用python绘制图表 摘要: 使用python绘制简单的图表,包括折线图.柱状图.条形图.饼图.散点图.气泡图.箱线图.直方图等. 前言 本文介绍如果使用python汇总常用的图表,与Excel ...

  10. es7,es8

    ES7新特性 ES7在ES6的基础上添加了三项内容:求幂运算符(**).Array.prototype.includes()方法.函数作用域中严格模式的变更. Array.prototype.incl ...