精华内容
下载资源
问答
  • Node之使用dns模块解析域名

    千次阅读 2020-01-11 23:24:47
    引 在网络编程中,开发者更倾向...其中三个主方法分别为用于一个域名解析为一组DNS记录的resolve方法、用于一个IP地址转换为一组域名的reverse方法以及用于一个域名转换为一个IP地址的lookup方法,dns模块中的...

    在网络编程中,开发者更倾向于使用域名,而不是IP地址来指定网络连接的目标地址。在Node.js中,提供dns模块,以实现域名查找及域名解析的处理。

    在dns模块中,提供了三个主方法及一系列便捷方法。其中三个主方法分别为用于将一个域名解析为一组DNS记录的resolve方法、用于将一个IP地址转换为一组域名的reverse方法以及用于将一个域名转换为一个IP地址的lookup方法,dns模块中的其余便捷方法均为resolve方法的一种便捷形式。

    使用resolve方法将域名解析为DNS记录

    resolve方法用于将一个域名解析为一组DNS记录。

    dns.resolve(domain,[rrtype],callback)
    
    • domain:参数值为一个字符串,用于指定需要被解析的域名,例如www.google.com,该域名字符串中可包括子域名。
    • rrtype:参数值为一个字符串,用于指定需要获取的记录类型,可指定的记录类型如下
      • “A”:该参数值为默认参数值。当记录类型为“A”时,该记录将一个IPv4地址映射为一个域名。
      • “AAAA”:当记录类型为“AAAA”时,该记录将一个IPv6地址映射为一个域名。
      • “CNAME”:当记录类型为“CNAME”时,表示该记录为一个域名的别名记录。例如,一个www.example.com域名记录也许为一个example.com域名记录的别名记录。
      • “MX”:MX记录指向一个使用SMTP的域中的邮件服务器。例如,当你向person@domain.com邮件地址发送电子邮件时,domain.com域的MX记录中保存了发送该邮件时的邮件服务器地址。
      • “TXT”:TXT记录是为该域名附加的描述记录。
      • “SRV”:SRV记录用于为一个特定域中所有可用服务提供信息。
      • “PTR”:PTR记录用于反向地址解析,该记录将一个域名映射为一个IPv4地址。
      • “NS”:NS(Name Server)记录是域名服务器记录,用来指定该域名由哪个DNS服务器进行解析。
    • callback:参数值用于指定当域名解析操作完成时调用的回调函数
      function(err,addresses){
        //回调函数代码略
      }
      

    resolve方法解析实例

    var dns = require('dns');
      dns.resolve('www.google.com','A',function(e,r) {
      if (e) console.log(e);
      else console.log(r);
      });
    

    使用lookup方法查询IP地址

    当使用resolve4方法或resolve6方法时,由于callback参数值回调函数中的address参数值数组中存放所有获取到的IPv4地址或IPv6地址,因此,dns模块中也提供了另一个用于获取第一个被发现的IPv4地址或IPv6地址的lookup方法

    dns.lookup(domain,[family],callback)
    
    • domain:参数值为一个字符串,用于指定需要被解析的域名,例如www.google.com,该域名字符串中可包括子域名。
    • family:为一个整数值,用于指定需要获取的IP地址类型,可指定的参数值为4或6。当参数值为4时获取IPv4地址,当参数值为6时获取IPv6地址。默认参数值为null,表示既可获取IPv4地址,又可获取IPv6地址。
    • callback:参数值用于指定当域名解析操作完成时调用的回调函数
      function(err,address,family){
        //回调函数代码略
      }
      

    使用reverse方法反向解析IP地址

    在dns模块中,可以使用reverse方法将一个IP地址反向解析为一组与该IP地址
    绑定的域名。

    dns.reverse(ip,callback)
    
    • ip:为一个字符串,用于指定需要被反向解析的IP地址。
    • callback:用于指定当反向解析地址操作完成时调用的回调函数
      function(err,domains){
      //回调函数代码略
      }
      

    dns模块中的各种错误代码

    在dns模块中,在各种方法的callback参数值回调函数中,err参数值为执行各种解析或反向解析操作时触发的错误对象,可根据该错误对象的code属性值,即触发的错误代号判断触发了什么错误。这些错误代号及其含义如下所示。

    • ENODATA:DNS服务器返回一个没有数据的查询结果。
    • EFORMERR:DNS服务器发现客户端请求查询时使用了格式错误的查询参
      数。
    • ESERVFAIL:DNS服务器执行查询操作失败。
    • ENOTFOUND:未发现任何域名。
    • ENOTIMP:DNS服务器不能进行客户端所请求的查询操作。
    • EREFUSED:DNS服务器拒绝进行查询操作。
    • EBADQUERY:格式错误的DNS查询。
    • EBADNAME:域名格式错误。
    • EBADFAMILY:不支持的IP地址类型。
    • EBADRESP:DNS答复的格式错误。
    • ECONNREFUSED:不能建立与DNS服务器之间的连接。
    • ETIMEOUT:与DNS服务器之间建立连接超时。
    • EEOF:已到达文件底部。
    • EFILE:读取文件失败。
    • ENOMEM:没有足够的内存空间。
    • EDESTRUCTION:通道已被销毁。
    • EBADSTR:字符串格式错误。
    • EBADFLAGS:指定了错误的判断标志。
    • ENONAME:指定的主机名不是数值格式的。
    • EBADHINTS:指定的提示标志无效。
    • ENOTINITIALIZED:c-ares类库初始化工作尚未完成。
    • ELOADIPHLPAPI:加载iphlpapi.dll时触发了一个错误。
    • EADDRGETNETWORKPARAMS:未发现GetNetworkParams函数。
    • ECANCELLED:DNS查询操作被取消。
    展开全文
  • # DNS:是一个UDP层上边的协议,用于将域名转换成IP地址,在我们平时浏览网页的时候, # 这个我们平时用到的特别多的,在我们打开浏览器进行搜索网页的时候,不是填入IP地址进行 # 搜索的,而只是输入域名,DNS协议...
    # DNS:是一个UDP层上边的协议,用于将域名转换成IP地址,在我们平时浏览网页的时候,
    # 这个我们平时用到的特别多的,在我们打开浏览器进行搜索网页的时候,不是填入IP地址进行
    # 搜索的,而只是输入域名,DNS协议会将域名解析成IP地址,然后记性寻找我们访问的网页。
    from scapy.all import *
    # 传入两个参数,域名和域名服务器。
    def dns_query(dns_name,dns_ip):
        # 首先构造一个DNS的包,IP的目的地址为第一个域名服务器地址,UDP字段让scapy自己填写,后边我们填写DNS字段的选项部分。
        # 这里是收一个包,发送一个包。
        dns_response = sr1(IP(dst = dns_ip)/UDP()/DNS(id=435,qr = 0,opcode=0,ra = 1,qd=DNSQR(qname=dns_name)),verbose=False)
        # print(dns_response.show())
        # 下边进行解析包。一个DNS的应答包中可能包含很多的回答,因为我们访问的域名可能有特别多的别名。
        layer = 1
        while True:
            try:
                print(dns_response.getlayer(DNS).fields['an'][layer].fields['type'])
                # 判断是否是A记录,每一层就是一个记录,但是不一定是A,可能是CNAME!
                # 只有A记录里边有IP地址,CNAME里边是别名。
                # 这里我们在A记录里边进行解析,如果不是A记录,那么就跳过。
                if dns_response.getlayer(DNS).fields['an'][layer].fields['type'] == 1:  # A记录
                    # 取出IP地址。
                    ip_data = dns_response.getlayer(DNS).fields['an'][layer].fields['rdata']
                    print('域名为:',dns_name,'的IP地址为:',ip_data)
                layer += 1
            except Exception as e :
                # 如果错误的话,就代表着包结束了
                print("错误",e)
                break
    
    
    
    if __name__ == "__main__":
        # 入参为要查询的域名,和第一个域名服务器的地址。
        dns_name = 'www.baidu.com'
        dns_ip = '192.168.60.14'
        dns_query(dns_name,dns_ip)
    

    python基础教程

    展开全文
  • 1 域名解析,将域名转换为ip地址 InetAddress也可以通过使用getAddress()来获得IP地址,但是它的返回值是一个4个字节的数组。 因此尽管getAddress()在获得IP方面是有用的,但却不适于用来输出。 package dns; ...

    1 域名解析,将域名可转换为ip地址
    InetAddress也可以通过使用getAddress()来获得IP地址,但是它的返回值是一个4个字节的数组。
    因此尽管getAddress()在获得IP方面是有用的,但却不适于用来输出。

      package dns;
     import java.net.InetAddress;
     import java.net.UnknownHostException;
     import java.util.Enumeration;
     import javax.comm.CommPortIdentifier;
     import javax.comm.SerialPort;
     public class NsLookup {
    
     public static void main(String[] args){
     InetAddress address=null;
     try {
         address = InetAddress.getByName(args[0]);
     } catch (UnknownHostException e) {
          e.printStackTrace();
     } 
     System.out.println(args[0]+": "+address.getHostAddress()); //args[0]是执行程序时写的参数,
     InetAddress localhost=null;
     try { 
        localhost = InetAddress.getLocalHost(); //本地地址
     } catch (UnknownHostException e) {
          e.printStackTrace();
     } 
     System.out.println("localhost:ip address "+localhost.getHostAddress());
     System.out.println("localhost:主机名: "+localhost.getHostName());
     /* *  在开始使用RS232端口通讯之前,我们想知道系统有哪些端口是可用的,以下代码列出系统中所有可用的RS232端口
     */ 
     CommPortIdentifier portId;
     Enumeration en = CommPortIdentifier.getPortIdentifiers();
     while (en.hasMoreElements()) {
       portId = (CommPortIdentifier) en.nextElement();
       if (portId.getPortType() == CommPortIdentifier.PORT_SERIAL) {
           System.out.println(portId.getName());
        }
     }
     }
     }

    执行时命令行参数如果输入:www.sina.com
    执行结果如下: 
    www.sina.com: 121.194.0.209
    localhost:ip address 59.64.158.214
    localhost:主机名: bupt
    COM1 
    COM2 
    还有一个域名可能对应不止一个ip地址,一下程序时列举出sina域名下的所有ip

    package dns;
     import java.net.InetAddress;
     import java.net.UnknownHostException;
     //有时一个域名会包含不止一个IP地址,比如微软的Web服务器,这是为了保持负载平衡。
     //InetAddress提供了一种可以得到一个域名的所有IP地址的方法
     public class NsLookup2 {   
     static public void main(String[] args) {
     try { 
     String name = args[0];
     InetAddress[] addresses = InetAddress.getAllByName(name);
     for (int i = 0; i < addresses.length; i++) {
        System.out.println(name + "[" + i + "]: "+ addresses[i].getHostAddress());
     } 
     } catch (UnknownHostException uhe) {
        System.err.println("Unable to find: " + args[0]);
     } } }

    执行结果: www.sina.com[0]: 121.194.0.208
    www.sina.com[1]: 121.194.0.209
    www.sina.com[2]: 121.194.0.210
    www.sina.com[3]: 121.194.0.203
    www.sina.com[4]: 121.194.0.205
    www.sina.com[5]: 121.194.0.206

    展开全文
  • DNS实现原理

    2020-06-13 15:43:21
    DNS (Domain Name System)是 “城名系统”的英⽂缩写,是⼀种组织成域层次结构的计算机和⽹络服务命名系统,它⽤于TCP/IP⽹络,它从事主机名或域名转换为实际IP地址的⼯作。DNS就是这样的⼀ 位“翻译官”,它的...

    DNS (Domain Name System)城名系统的英⽂缩写,是⼀种组织成域层次结构的计算机和⽹络服务命名系统,它⽤于TCP/IP⽹络,它从事将主机名或域名转换为实际IP地址的⼯作。DNS就是这样的⼀ 位“翻译官,它的基本⼯作原理可⽤下图来表示。

     

    DNS解析过程

    • 浏览器中输⼊域名,操作系统会先检查⾃⼰本地的hosts⽂件是否有这个⽹络映射关系,如果有就先调⽤这个IP地址映射,完成域名解析。
    • 如果hosts没有域名,查找本地DNS解析器缓存,如果有直接返回,完成域名解析。
    • 如果还没找到,会查找TCP/IP参数中设置的⾸选DNS服务器,我们叫它本地DNS服务器,此服务收到查询时,如果要查询的域名包含在本地配置区域资源中,则返回解析结果给客户机,完成域名解析,此解析具有权威性。
    • 如果要查询的域名,不由本地DNS服务器区域解析,但该服务已经缓存了地址映射关系,则调⽤这IP地址映射,完成域名解析,此解析不具有权威性。
    • 如果上述过程失败,则根据本地DNS服务器的设置进⾏查询,如果未⽤转发模式,则把请求发给根服务器,根服务器返回⼀个负责该顶级服务器的IP,本地DNS服务器收到IP信息后,再连接该服务器进⾏解析,如果仍然⽆法解析,则发送下⼀级DNS服务器,重复操作,直到找到。
    • 如果是转发模式则把请求转发⾄上⼀级DNS服务器,假如仍然不能解析,再转发给上上级。不管是否转发,最后都把结果返回给本地DNS服务器上述⼀个是迭代查询,⼀个是递归查询。递归查询的 过程是查询者发⽣了更替,⽽迭代查询过程,查询者不变。
    通过上⾯的步骤,我们最后获取的是IP地址,也就是浏览器最后发起请求的时候是基于IP来和服务器做
    信息交互的。
    举个例⼦来说,你想知道某个⼀起上法律课的⼥孩的电话,并且你偷偷拍了她的照⽚,回到寝室告诉⼀个很仗义的哥们⼉,这个哥们⼉⼆话没说,拍着胸脯告诉你,甭急,我替你查(此处完成了一次递归查询,即,问询者的⻆⾊更替)。然后他拿着照⽚问了学院⼤四学⻓,学⻓告诉他,这姑娘是xx系的;然后这哥们⼉⻢不停蹄⼜问了xx系的办公室主任助理同学,助理同学说是xxyy班的,然后很仗义的哥们⼉去xxyy班的班⻓那⾥取到了该⼥孩⼉电话。(此处完成若千次迭代查询,即,问询者⻆⾊不变,但反复更替问询对象)最后,他把号码交到了你⼿⾥。完成整个查询过程。

     

    展开全文
  • DNS 域名服务器

    2015-09-15 14:42:06
    域名服务器域名服务器:1、域名...一、DNS的作用域名是为了方便记忆而专门建立的一套地址转换系统,要访问一台互联网上的服务器,最终还必须通过IP地址来实现,域名解析就是将域名重新转换为IP地址的过程。这一过程...
  • 域名系统DNS

    2019-07-31 22:22:33
    DNS是用于便于人们使用的机器名字(域名转换为IP地址的系统。 **(博主认为学习一个协议应首先明白它是用来做什么的,然后协议的具体不过是实现这一目的的过程,带着协议最终要实现的效果来学习协议,学习目的...
  • DNS域名解析基本概念

    2019-03-05 09:43:26
    DNS可以理解为域名系统(Domain Name ...对应信息,并具有将域名转换为IP地址功能。所有网络的通信都是基于IP地址的,这点不可改变,因此若某主机要访问域名为www.baidu.com的服务器时,需要经历如下过程:首先...
  • 导读 最近在处理 Kuberntes 中的 DNS 解析问题, 正好...众所周知, DNS 服务器用于将域名转换为 IP (具体为啥要转换建议复习下 7 层网络模型). Linux 服务器中 DNS 解析配置位于/etc/resolv.conf, 在 Pod 中也不例外,...
  • 1IPv6域名解析IPv6网络中,DNS客户端通过IPv6域名解析功能实现域名与IPv6地址的转换。IPv6 DNS与IPv4 DNS相同,分为静态域名解析和...IPv6 DNS与IPv4 DNS的区别仅在于IPv6 DNS将域名转换为IPv6地址,而非IPv4地址...
  • 最近在处理Kuberntes中的...众所周知, DNS服务器用于将域名转换为IP(具体为啥要转换建议复习下7层网络模型). Linux服务器中, dns解析配置位于/etc/resolv.conf, 在pod中也不例外, 下面是某个Pod中的配置: 1 2 3
  • DNS服务器所提供的服务是完成主机名和域名转换为IP地址的工作。为什么需要主机名和域名转换为IP地址的工作呢?这是因为,当网络上的一台客户机访问某一服务器上的资源时,用户在 浏览器地址栏中输入的是便于识记...
  • python脚本实现~DNS欺骗攻击

    千次阅读 2020-11-19 15:34:13
        DNS协议即域名解析协议,是用来将域名转换为IP地址。 DNS协议报文格式     会话标识:是DNS报文的ID标识,对于请求报文和其对应的应答报文,这个字段是相同的,通过它可以区分DNS
  • DNS为Domain NameSystem(域名系统)的缩写,它是一种ip地址转换成对应的主机名或主机名转换成与之相对应ip地址的一种机制。其中通过域名解析出ip地址的叫做正向解析,通过ip地址解析出域名的叫做反向解析。我们...
  • 域名服务器是指保存有该网络中所有主机的域名和对应IP地址,并具有将域名转换为IP地址功能的服务器。 DNS使用TCP与UDP端口号都是53,主要使用UDP,服务器之间备份使用TCP。 域名到IP地址的解析过程的要点如下...
  • DNS(Domain Name System)域名解析,是为了方便记忆而专门建立的一套地址转换系统,要访问一台互联网上的服务器,最终还必须通过IP地址来实现,域名解析就是将域名重新转换为IP地址的过程。一个域名对应一个IP地址...
  • 自己动手实现DNS协议

    2019-10-23 16:19:50
    1. 主要内容 不说废话,直接进入正题。先说说本文本文的主要...关于DNS是啥,想必学过计算机网络的应该都知道,它是Domain Name System的简写,中文翻译过来就是域名系统,是用来主机名转换为ip的。事实上,除了...
  • DNS主从复制实现

    2020-05-17 21:04:16
    DNS(Domain name server),是IP地址转换为域名地址。当在互联网访问外部服务器时,其主机都是以IP地址及端口标识(被称之为一个套接字文件),当主机A需要与主机B通信时,A必须知道其B的IP地址,但IP地址不能方便...
  • DNS中继服务器的实现

    热门讨论 2010-10-20 16:31:49
    设计一个DNS服务器程序,读入“域名-IP地址”对照表,当客户端查询域名...表中未检到该域名,则向因特网DNS服务器发出查询,并结果返给客户端(中继功能) 考虑多个计算机上的客户端会同时查询,需要进行消息ID的转换
  • 它是:1)由分层的DNS服务器实现的分布式数据库;2)一个使得主机能够查询分布式数据库的应用层协议 2. DNS基础 2.1 层次结构 命名树上任何一个结点的域名从该结点到最高层的域名串连起来,中间用点分隔。每个...
  • 域名服务器是指保存有该网络中所有主机的域名和对应IP地址,并具有将域名转换为IP地址功能的服务器。DNS使用TCP与UDP端口号都是53,主要使用UDP,服务器之间备份使用TCP。  域名到IP地址的解析过程的要点如下:当...
  • 设计一个DNS服务器程序,读入“域名-IP地址”对照表,当客户端查询域名...表中未检到该域名,则向因特网DNS服务器发出查询,并结果返给客户端(中继功能) 考虑多个计算机上的客户端会同时查询,需要进行消息ID的转换
  • DNS( Domain Name System)是“域名系统”的英文缩写,是一种组织成域层次结构的计算机和网络服务命名系统,使用的是UDP协议的53号端口,它用于TCP/IP网络,它所提供的服务是用来主机名和域名转换为IP地址的工作。...
  • 输入域名 通过DNS服务器 域名转换为域名访问服务器; A电脑如何访问到B电脑的网页 A、B电脑在同一个局域网内 (一堆主机通过网线连接在一起) ; B电脑必须装一个服务器的软件 (Apache、ngnix、node 等服务器软件) ...
  • 域名是为了方便记忆而专门建立的一套地址转换系统,要访问一台互联网上的服务器,最终还必须通过IP地址来实现,域名解析就是将域名重新转换为IP地址的过程。一个域名对应一个IP地址,一个IP地址可以对应多个域名;...
  • DNS

    2019-09-26 09:57:02
    1. 主要内容 不说废话,直接进入正题。先说说本文本文的主要内容,好让你决定...关于DNS是啥,想必学过计算机网络的应该都知道,它是Domain Name System的简写,中文翻译过来就是域名系统,是用来主机名转换为...

空空如也

空空如也

1 2 3 4 5 ... 9
收藏数 170
精华内容 68
关键字:

dns实现将域名转换为