DNS采用C/S机制。实现域名与IP地址转换。DNS服务器用于存储资源记录并提供名称查询服务,DNS客户端也称解析程序,用来插叙服务器并获取名称解析信息。

正向解析与反向解析

按照DNS查询目的,可将DNS解析分为以下两种类型。

  • 正向解析

根据计算机的DNS名称(即域名)解析出相应的IP地址。

大部分DNS解析都是正向解析,即根据DNS域名查询对应的IP地址及其他相关信息。正向解析又称标准查询。正向解析记录存储在正向解析区域文件中。

  • 反向解析

根据计算机的IP地址解析其DNS名称,多用来为服务器进行身份验证。

有时我们也会用到反向解析,即通过IP地址查询对应的域名,最典型的就是判断IP地址所对应的域名是否合法。由于反向解析的特殊性,RFC 1304规定了固定格式的反向解析区域后缀格式in-addr.arpa

与DNS名称不同,当IP地址从左到右读时,它们是以相反的方式解释的,所以对每个8位字节值需要使用域的反序,因此建立 in-addr-arpa

反向解析区域文件与正向解析区域文件格式相同,只是其主要内容是用于建立IP地址到DNS域名的转换记录,即PTR资源指针记录。PTR资源指针记录和A资源记录正好相反,它是将IP地址解析成DNS域名的资源记录。

域名解析的具体过程

域名系统 (DNS) 旨在将主机名解析为 IP 地址。 将名称解析为 IP 地址的过程称为“正向解析”。 DNS 树被组织成一个倒置的树结构,地址的最不具体的部分在顶部,地址的最具体的部分在底部。

我们知道DNS服务器里面有两个区域,即“正向查找区域”和“反向查找区域”,正向查找区域就是我们通常所说的域名解析,反向查找区域即是所说的IP反向解析,我们下面来解析上图的域名解析过程。

  • 当客户机提出查询请求时,首先在本地计算机的缓存中查找。如果在本地无法获得查询信息,则将查询请求发给DNS服务器。
  • 首先客户机将域名查询请求发送到本地DNS服务器,当本地DNS服务器接到查询后,首先在该服务器管理的区域的记录中查找,如果找到该记录,则利用此记录进行解析;如果没有区域信息可以满足查询要求,服务器在本地的缓存中查找。
  • 如果本地服务器不能在本地找到客户机查询的信息,将客户机请求发送到根域名DNS服务器。
  • 根域名服务器负责解析客户机请求的根域部分,它将包含下一级域名信息的DNS服务器地址返回给客户机的DNS服务器地址。
  • 客户机的DNS服务器利用根域名服务器解析的地址访问下一级DNS服务器,得到再下一级域我的DNS服务器地址。
  • 按照上述递归方法逐级接近查询目标,最后在有目标域名的DNS服务器上找到相应IP地址信息。
  • 客户机的本地DNS服务器将递归查询结果返回客户机。
  • 客户机利用从本地DNS服务器查询得到的IP访问目标主机,就完成了一个解析过程。

正向解析可以通过主机名获取其对应的广域网IP地址,使用 nslookup 命令在 Linux上输入

nslookup 【domain】

从返回的信息中可以看到正向解析的结果。

如何做反向DNS?

我们可以通过命令来执行反向 DNS 查找

1、使用 nslookup 命令
2、使用 dig 命令
3、使用 rDNS 查找工具

反向 DNS 查找命令

nslooup命令
nslookup最简单的用法是查询域名对应的IP地址,也可以使用IP地址查找域名,例如:

nslookup [ip_address]

使用nslookup可以输出返回指定 IP 地址的域名。

由于在域名系统中,一个IP地址可以对应多个域名,因此从IP出发去找域名,理论上应该遍历整个域名树,但这在Internet上是不现实的。为了完成逆向域名解析,系统提供一个特别域,该特别域称为逆向解析域in-addr.arpa。


在 IPv6 中,PTR 记录将 rDNS 条目存储在 .ip6.arpa 域中,而不是 .in-addr.arpa

dig命令

Linux下解析域名除了使用nslookup之外,还可以使用dig命令来解析域名,dig命令可以得到更多的域名信息。

dig命令是一个用于询问 DNS 域名服务器的灵活的工具。常见使用:

dig -x [ip_address]

更多关于dig命令,可以查找man手册。

dig -x 8.8.8.8


输出显示指定 IP 地址的域名。

DNS反向解析实现

int main(int argc, char* argv[])
{int ret = 0;DNS_QUERY query;/* 只接受一个命令行参数  */if (argc != 2 || (argc == 2 && argv[1][0] == '-')) {fprintf(stderr, "usage: %s [DOMAIN | IP]\n\n", argv[0]);return -1;}/* 从传递的域(或 IP)创建 DNS_QUERY */query = createQuery(argv[1]);/* DNS 查询的十六进制转储  */printf("\nDNS Query (%i bytes):\n", query.len);if (query.len == 0)return -1;hexDump(query.bytes, query.len);ret = dnsLookup(&query);if (ret == -1){printf("dnsLookup fail!!!\n");return -1;}printf("\n");return 0;
}

编译运行

总结

反向 DNS 是从 IP 地址对域名的 DNS 查找。 常规 DNS 请求从域名解析 IP 地址,而 rDNS 则相反,因此名称相反。

域名是为了方便记忆而专门建立的一套地址转换系统,要访问一台互联网上的服务器,最终还必须通过IP地址来实现,域名解析就是将域名重新转换为IP地址的过程。这一过程通过域名解析系统DNS来完成。

欢迎关注微信公众号【程序猿编码】,需要DNS反向源码的添加本人微信号(c17865354792)

什么是DNS的正向解析与反向解析?代码实现?相关推荐

  1. Centos 7 搭建DNS正向解析和反向解析

    Centos 7  搭建DNS正向解析和反向解析服务的三要素:安装-配置-启动  1.使用yum安装DNS  yum  install  bind -y  2.修改配置文件       vi /etc ...

  2. DNS域名解析服务(正向解析、反向解析、主从服务器)

    介 绍 Internet发展至今,在网的服务器和个人主机数量庞大,每个用户通过记忆IP地址访问网络资源并不现实了. 目前大家访问互联网进行上网浏览信息时,正常是通过域名进行访问(例如:www.baid ...

  3. DNS域名解析服务(正向解析,反向解析,主从解析)

    文章目录 DNS域名解析 DNS系统的作用及类型 DNS系统的作用 DNS类型 BIND的安装文件 正向解析 反向解析 主从复制 主服务器 从服务器 DNS域名解析 [域名]解析是把域名指向网站空间I ...

  4. linux7 dns正向,Centos 7 搭建DNS正向解析和反向解析

    Centos 7 搭建DNS正向解析和反向解析 服务的三要素:安装-配置-启动 1.使用yum安装DNS yum install bind -y 2.修改配置文件 vi /etc/named.conf ...

  5. 搭建DNS服务,正向解析和反向解析搭建DNS服务器

    搭建DNS服务器 DNS系统在网络中的作用:维护着一个地址数据库,其中记录了各种主机域名与IP地址的对于关系,以方便为客户程序提供正向或反向的地址查询服务,即正向解析与方向解析. 正向解析:将指定的域 ...

  6. DNS 服务与邮件服务器应用--配置DNS正向解析与反向解析

    配置DNS正向解析与反向解析: 什么叫正向解析和反向解析: 正向解析:根据主机名(域名)查找对应的 IP 地址. 反向解析:根据 IP 地址查找对应的主机名(域名).( 反向解析的作用是将用户提交的 ...

  7. DNS中的正向解析与反向解析 及 nslookup命令使用

    DNS中的正向解析与反向解析 - Jackxin Xu IT技术专栏 - 博客频道 - CSDN.NET http://blog.csdn.net/jackxinxu2100/article/deta ...

  8. DNS正向解析与反向解析

    DNS正向解析与反向解析 DNS:(Domain Name System,域名系统),因特网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网, 而不去记住能够被机器直接读取 ...

  9. Linux设备配置DNS服务器,实现正向解析和反向解析,实现DNS主从服务器同步,实现批量域名正/反向解析

    本文基于Linux上CentOS 7版本配合bind(named)服务进行演示 一.DNS域名服务器原理及作用等介绍 1.DNS简介: 2.原理简单介绍 3.常见域名后缀 4.DNS域名服务器类型 5 ...

  10. Linux服务---DNS的正向解析和反向解析

    一.DNS概述 DNS(Domain Name System,域名系统),万维网上作为域名和IP地址相互映射的一个分布式数据库,方便用户使用名称的访问互联网.通过域名,最终得到该域名对应的IP地址的过 ...

最新文章

  1. Linux 有关管理进程的命令小结
  2. 7-17 BCD解密(10 分)
  3. Html5+razor+jqmobile尝鲜
  4. DataSet存储数据和结构到XML
  5. 错误检测dP-bitstream-ei_flag runRestrictRef
  6. 单链表的合并算法_图解算法:单链表两两反转 | 眼睛会了手就会系列
  7. 修改支付宝账号的授权方式
  8. 在Windows环境下为Python 2.5安装SSL模块
  9. Python把类当做字典来访问
  10. 2020 最烂密码 TOP 200 大曝光,霸榜的仍旧是 123456!
  11. 乐购系统源码可多开站
  12. 怎样在EDIUS中进行快速抠图
  13. 1.Matlab图像的读取和显示
  14. 威金病毒(viking)症状和治理方法
  15. Octree 了然于胸
  16. 【信息系统项目管理师】干系人管理
  17. 【tinymce-vue】tinymce-vue自定义图片上传插件,且在插件中调用vue组件
  18. CSS进阶 如何实现圆形半圆
  19. steam饥荒存档备份_如何查找和备份您的Steam屏幕截图
  20. android devik进程,suckit后门程序的分析 (二)

热门文章

  1. c++中char的用法详解
  2. 公司倒闭 1 年了,而我当年的项目上了 GitHub 热榜
  3. 计算机操作系统存字体在哪里,Windows操作系统的字体在哪个文件夹,如何添加字体文件...
  4. 蓝牙inquiry流程之HCI_Inquiry_Result_With_RSSI和HCI Extended Inquiry Result处理
  5. gcc的中文版使用说明和选项
  6. webgl的平行光漫反射示例
  7. sql语句根据身份证号获取年龄
  8. HANA数据库备份脚本案例(刘欣)
  9. 2022山东省安全员A证操作证考试题库模拟考试平台操作
  10. cdrom是多媒体微型计算机,2011年计算机一级考试理论试题:多媒体