如果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. UITableViewCell 高度计算从混沌初始到天地交泰

    [原创]UITableViewCell 高度计算从混沌初始到天地交泰 本文主要基予iOS UITableViewCell 高度自适应计算问题展开陈述,废话少说直入正题: UITableView控件可能 ...

  2. C#定义自定义类型转换

    类型转换不限于单一继承链中的类型(派生类转换为基类或者基类转换为派生类),完全不相关的类型之间也能进行转换.关键在于在两个类型之间提供转型操作符. 在下面这样的情况下应该定义显式转型操作符: 在转型有 ...

  3. mysql net连接读取结果为乱码 Incorrect string value

    在mysql直接查询中文正常,通过连接到mysql读取中文内容为乱码.同时插入中文内容也失败提示 Incorrect string value: '\xBC\xA4\xB7\xA2\xBF\xB4.. ...

  4. java_object的具体使用--上帝

    就我们所知道的,java中有子类和父类,子类由于继承父类而形成,那么父类还有没有父类呢?答案是有了,父类的父类就是object类,一切父类都继承了它,那么根据继承的属性,每一个子类都有一个object ...

  5. 使用struts2+hibernate的增、删、改、查构架简单的学生管理系统

    工程环境:MyEclipse8.5 其他配置:Hibernate框架+jtds链接数据库驱动+Sql2008数据库+MyEclipse serevr+JDK1.7 开发环境:Win7x64 这个项目用 ...

  6. Nginx 域名转发

    例如访问www.b.cn直接跳到www.a.cn上去,又不想多域名捆绑一个目录. server { listen 80; server_name www.b.cn; rewrite ^/(.*)$ h ...

  7. sprintf函数php的详细使用方法

    PHP sprintf() 函数 先说下为什么要写这个函数的前言,这个是我在微信二次开发的一个token验证文档也就是示例文档看到的一个函数,当时非常不理解,于是查了百度,但是很多结果都很笼统,结果也 ...

  8. python27读书笔记0.1

    --Notes: 测试环境:Windows ,python 2.7.3,python 自带的IDLE #-*- coding: utf-8 -*- # First Lesson# --- Line s ...

  9. building hadoop2.4.1 on centos7[在centos7上面构建hadoop2.4.1]

    本文介绍在centos7上面通过hadoop2.4.1源码构建hadoop distribution 版本,即hadoop的运行版本. 为何要自己building,而不用Apache的distribu ...

  10. 使用openxml读取xml数据

    xml的数据格式如下: <?xml version="1.0"?> <Language Name="Chinese"> <Loca ...