返回顶部
首页 > 资讯 > 后端开发 > Python >Python模块域名dnspython解析
  • 376
分享到

Python模块域名dnspython解析

2024-04-02 19:04:59 376人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

目录dnspython源码安装Python模块域名解析方法讲解总结dnspython是python实现的一个DNS工具包,它支持记录类型、查询、传输并动态更新ZONE信息等等。据说d

dnspython是python实现的一个DNS工具包,它支持记录类型、查询、传输并动态更新ZONE信息等等。据说dnspython可以代替dig、nslookup等工具。下面我们就来介绍dnspython模块的使用。

dnspython源码安装

这里介绍一下dnspython模块的安装,采用源码的安装方式,目前使用的版本是1.16.0

如下安装:

wget https://www.dnspython.org/kits/1.16.0/dnspython-1.16.0.tar.gz

tar -zxvf dnspython-1.16.0.tar.gz

cd dnspython-1.16.0
python setup.py install

看到红框的信息说明安装完成了。

好了,开始进入今天的正题,python模块的讲解。

python模块域名解析方法讲解

平常测试DNS的时候,有些操作手动处理不方便,需要写个脚本来实现,这是就会想到使用dnspython模块,它提供了大量的DNS处理方法,我们知道最常用的方法就是域名查询,dnspyhton库提供一个解析器类(resolver),我们可以使用它query方法实现域名查询功能。这里要说一下query:

query(self, qname, rdtype = 1, rdclass = 1, tcp = False, source = None, raise_on_no_answer = True, source_port = 0)

qname:查询的域名。
rdtype :指定RR资源的类型

全部的rdtype类型为:

常用的有以下几种:

A记录:将主机名转换成IP地址
MX记录:邮件交换记录,定义邮件服务器的域名
CNAME记录:别名记录,实现域名间的映射
NS记录:标记区域的域名服务器及授权子域
PTR记录:反向解析,与A记录相反,将IP地址转换为主机名
SOA记录:SOA标记,一个起始授权区的定义

rdclass: 指定网络类型,可选的值为CH、IN。其中IN为默认的,使用最广泛。

tcp :指定查询是否启动TCP协议,默认不启动。

source与source_port:指定的查询源地址与端口。

raise_on_no_answer :指定查询无应答时是否触发异常,默认为True。

下面我们开始对常见解析类型进行说明。

解析类型说明

A记录

#!/usr/local/bin/python38
# -*- coding: utf-8 -*-
import dns.resolver

domain = input('Please input an domain: ')  #输入域名地址
A = dns.resolver.query(domain, 'A')  #查询记录为A记录
for i in A.response.answer:
	for j in i.items:
		if j.rdtype == 1: #加判断,不然会出现AttributeError: 'CNAME' object has no attribute 'address'

			print(j.address)

运行代码查看结果,这里以www.baidu.com域名为例:

这样子我们就将www.baidu.com的域名解析出来了。 来看看效果:

MZ记录

#!/usr/local/bin/python38
# -*- coding: utf-8 -*-

import dns.resolver
domain = input('Input an domain : ')
MX = dns.resolver.query(domain, 'MX')   # 指定解析类型为MX记录
for i in MX:                            # 遍历回应结果
	print('MX preference =', i.preference, 'mail exchanger =', i.exchange)

运行代码查看结果,这里以qq.com域名为例:

其中我们可以看到preference值(优先级)和exchange值(交换地址),其中优先级默认为10,MX记录可以通过设置优先级实现主辅服务器设置,”优先级”中的数字越小表示级别越高,“优先级”仅对MX记录有效。

NS记录

NS(Name Server)域名服务器记录。用来表明由哪台服务器对该域名进行解析。在注册域名时,总有默认的DNS服务器,每个注册的域名都是由一个DNS域名服务器来进行解析的。

下面实现NS记录查询方法:

#!/usr/local/bin/python38

import dns.resolver
domain = input('Input an domain : ')
NS = dns.resolver.query(domain, 'NS')
for i in NS.response.answer:
	for j in i.items:
		print(j.to_text())


运行结果如下:

只限输入一级域名,如baidu.com。如果输入二级或多级域名,如:www.baidu.com,则是错误的,我们可以试一下,验证问题:

CNAME记录

使用CNAME时,CNAME的目标主机地址只能使用主机名,不能使用IP地址。主机名前不能有任何其他前缀,如:Http://等是不被允许的。

来看看下面代码实现CNAME记录方法:

#!/usr/local/bin/python38

import dns.resolver
domain = input('Input an domain: ')
CNAME = dns.resolver.query(domain,'CNAME')
for i in CNAME.response.answer:
	for j in i.items:
		print(j.to_text())

运行结果如下:

运行结果出现www.a.shifen.com域名,这个域名就是www.baidu.com的别名指向。相当于用子域名来代替ip地址,优点是如果ip地址变化,只需要改动子域名的解析,而不需要逐一改变ip地址解析。

DNS域名轮询业务监控

大部分的DNS解析器都是一个域名对应一个IP地址,但是通过DNS轮询技术可以做到一个域名对应多个IP,从而实现最简单高效的负载平衡,不过此方最大的弊端是目标主机不可用时无法被自动剔除,因此做好业务主机的服务可用监控至关重要。

下面我们来实现域名的解析,获取域名的所有A记录解析IP列表。

#!/usr/local/bin/python38

import dns.resolver
import httplib2

iplist = []
appdomain = "www.baidu.com"

def get_iplist(domain=""):
    try:
        A = dns.resolver.query(domain,"A")
    except Exception as e:
        print("dns resolver error:" + str(e))
        return
    for i in A.response.answer:
        for j in i.items:
            if j.rdtype == 1:
                iplist.append(j.address)
    return True

def checkip(ip):
    checkurl = 'http://' + ip + ":80"
    getcontent = ""
    httplib2.Socket.setdefaulttimeout(5)
    conn = httplib2.Http()

    try:
        resp,getcontent=conn.request(checkurl)
    finally:
        if  resp['status']== "200":
            print(ip+"[OK]")
        else:
            print(ip+"[Error]")


if __name__ == "__main__":
    if get_iplist(appdomain) and len(iplist) > 0:
        for ip in iplist:
            checkip(ip)


运行结果如下:

从结果可以看出,域名www.baidu.com解析出3个IP地址,并且服务都是正常的。上面的代码,第一步通过dns.resolver.query()方法获取业务域名A记录信息,查询出所有IP地址列表,再使用httplib模块的request()方法以GET方式请求监控页面,监控业务所有服务的IP是否服务正常。

总结

我们知道将IP地址转换为可读格式或单词后,便称为域名。在python中,域名到IP地址的转换由python模块dnspython管理。它支持记录类型、查询、传输并动态更新ZONE信息的方法。感兴趣的朋友,可以去看看dnspython源码。

到此这篇关于Python模块域名dnspython解析 的文章就介绍到这了,更多相关Python模块域名dnspython内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Python模块域名dnspython解析

本文链接: https://lsjlt.com/news/119799.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Python模块域名dnspython解析
    目录dnspython源码安装python模块域名解析方法讲解总结dnspython是python实现的一个DNS工具包,它支持记录类型、查询、传输并动态更新ZONE信息等等。据说d...
    99+
    2024-04-02
  • nodejs之域名解析模块DNS的简介
    这篇文章将为大家详细讲解有关nodejs之域名解析模块DNS的简介,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。工作原理  打开浏览器,在上方地址栏输入网址的那一刻,这个回车按了之后,发生了很多事情。首先...
    99+
    2023-06-06
  • 使用python-whois模块查询域名
    一,简介 通过域名注册信息,可以知道一个网站背后的公司信息,这个还是很厉害的,你用其他语言想查询这个,不好下手吧? Python直接提供了成熟的模块,就是这么锋利,它就是python-whois模块。 二,模块安装 在终端命令行执...
    99+
    2023-01-31
    模块 域名 python
  • aliyun域名解析python api
    最近有一个需求,需要把aliyun域名解析功能解析到自己到平台上,其中总结了最主要的功能是(添加解析,修改解析,删除解析,暂停解析,开启解析等等)。所以下面的脚本主要实现这几个功能,还有其他功能自己可以查资料扩展,也是很简单的。使用步骤1、...
    99+
    2023-01-31
    域名解析 aliyun api
  • python如何绑定域名解析
    python中实现单线程绑定域名解析,具体方法如下:import timeimport socketdef ReadHost(file):  hosts=[]  ...  return hostsdef SynResolve(fr):  h...
    99+
    2024-04-02
  • Python——域名解析成IP地址
    一.说明 Python的Socket模块提供有域名转为对应IP地址的方法。本例中,将urllist.txt中的每行URL都试图解析成IP地址,保存到iplist.txt。需要注的是,socket.gethostbyname(...
    99+
    2023-01-31
    域名解析 地址 Python
  • Python中functools模块函数解析
    Python自带的 functools 模块提供了一些常用的高阶函数,也就是用于处理其它函数的特殊函数。换言之,就是能使用该模块对可调用对象进行处理。 functools模块函数概览 functoo...
    99+
    2022-06-04
    函数 模块 Python
  • python xlwt模块的使用解析
    目录一、基础类介绍1、工作簿类Workbook简介:2、工作表类WorkSheet简介3、创建一个不带样式的基础Excel表二、xlwt高级应用1、字体类Font简介1.1创建一个改...
    99+
    2024-04-02
  • python 命令行 解析模块 optp
      Python: 使用 optparse 处理命令行参数 python optparse命令解析模块:https://www.cnblogs.com/pping/p/3989098.html python optparse模块的简单用法...
    99+
    2023-01-31
    命令行 模块 python
  • 深入解析Python中的urllib2模块
    Python 标准库中有很多实用的工具类,但是在具体使用时,标准库文档上对使用细节描述的并不清楚,比如 urllib2 这个 HTTP 客户端库。这里总结了一些 urllib2 的使用细节。 Prox...
    99+
    2022-06-04
    模块 Python
  • Python获取当前模块名
     http://jjchen-lian201205235512.iteye.com/blog/1988206 摘自web.py框架代码  #!/usr/bin/env python    import sys  import os  ...
    99+
    2023-01-31
    模块 Python
  • 怎么解析域名
    解析域名的方法在域名提供商进行解析,解析过程中有不同的记录类型,比如:A记录解析可以指定服务器ip进行解析,在自己的域名管理中,打开域名列表,填写相关信息进行解析。CNAME解析可以将将一个域名指向另一个域名。也是在自己的域名管理中进行解析...
    99+
    2024-04-02
  • 如何解析域名
    记录类型选择“A”或者“CNAME”;记录值填写空间商提供的主机IP地址;MX优先级不需要设置;TTL设置默认的3600即可,而MX记录解析是做邮箱解析使用的,记录类型选择MX的话,路类型选择通用,记录值填写邮局商提供的服务器IP地址,有多...
    99+
    2024-04-02
  • 何为域名解析
    本篇内容主要讲解“何为域名解析”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“何为域名解析”吧!域名是很常见的对于现在的网络时代来说,所以很多时候都要进行域名的注册,特别是网络域名的注册,那么免费...
    99+
    2023-06-06
  • thinkphp5.0中域名项目绑定不同模块
    thinkphp5.0中域名项目绑定不同模块,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。(一)下载 thinkphp5.0.24composer c...
    99+
    2023-06-20
  • python模块讲解
    一、模块分类:1.标准库模块:python自带的,直接使用import可直接使用;2.第三方库:外部的使用,需要先下载(pip install module_name)3.程序自定义模块:自己定义的模块 二、模块调用(import)的流程1...
    99+
    2023-01-31
    模块 python
  • 代码解析python标准库logging模块
    目录问题1:如何获取caller的(文件名,行号,函数名)?findCaller内容如下:currentframe函数的定义:问题2: Logger对象的层级,父子关系如何实现的?M...
    99+
    2024-04-02
  • Python中re模块基本用法解析
    基于Python的正则表达式, 使用re模块: 1. match()方法, 从字符串头部开始匹配 import re content = 'The 123456 is my one phone number.' print(le...
    99+
    2023-01-31
    模块 Python
  • 静态域名解析和动态域名解析有什么区别
    静态域名解析与动态域名解析的区别有以下两点指向对象不同静态域名解析一般是一个域名指向一个固定IP;而动态域名解析一般是一个域名指向一个动态IP。解析过程不同动态域名解析是将动态IP地址映射到一个固定的域名解析服务上,用户每次连接网络的时候,...
    99+
    2024-04-02
  • 域名解析如何配置主域名指向
    域名解析中配置主域名指向的方法首先,在浏览器中进入域名代理商网站,并登录到域名管理控制台;登录到域名管理控制台后,在控制台中选择需要解析的域名,点击解析;进入域名解析界面后,点击“添加记录”按钮;最后,在弹出的添加解析记录页面中,记录类型选...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作