【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服务器,该服务器 ...
随机推荐
- WCF编程系列(三)地址与绑定
WCF编程系列(三)地址与绑定 地址 地址指定了接收消息的位置,WCF中地址以统一资源标识符(URI)的形式指定.URI由通讯协议和位置路径两部分组成,如示例一中的: http://loc ...
- html19-----视频,音乐的插入
视频格式 MP4 格式是一种新的即将普及的因特网视频格式.HTML5 .Flash 播放器以及优酷等视频网站均支持它. 格式 文件 描述 AVI .avi AVI (Audio Video Inter ...
- How to: Declare encoding UTF-8 in python
References: http://stackoverflow.com/questions/12238307/declaring-encoding-in-python http://stackove ...
- mysql---union和左连接的两倒面试题
第一道: 思路:无非是将hid与gid与t表中的tname关联起来.实质上是三表关联(m,t,t) 先将hid与tname关联起来,运用左连接 再将结果集与t表中的tname关联起来,使得gid与tn ...
- csdn博客刷点击率代码
此文为转载,亲测有效. import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; impo ...
- javascripct数组
定义数组 数组对象用来在单独的变量名中存储一系列的值. 我们使用关键词 new 来创建数组对象.下面的代码定义了一个名为 myArray 的数组对象: var myArray=new Array() ...
- linux批量修改文件名的shell脚本
linux中批量修改文件名的shell脚本代码,主要是使用了rename,结合shell,喜欢的朋友可以参考下 使用 rename 命令 ======================== NAME ...
- MVC+EF 随笔小计————Html Helpers
理论基础 -- Html Helpers 主要分成输入类和显示类. 输入类: TextArea, TextBox Password Hidden DropDownList ListBox (与Drop ...
- windows azure tools for mac
http://azure.microsoft.com/en-us/documentation/articles/xplat-cli/?fb=zh-cn http://www.windowsazure. ...
- vm安装ubuntu桥接模式无法联网
桥接模式,就是和主机不同的ip,其他都是一样的. 编辑网络连接 查看自己机子的ip ipconfig 一般情况下是 ip 192.168.1.XXX 子网掩码 255.255.255.0 网关 192 ...