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

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)

  • 6
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
反向解析是指通过IP地址查询域名的过程。正向解析是根据域名查找IP地址,而反向解析则是根据IP地址查找域名。反向解析通常用于验证某个IP地址是否属于某个特定的域名。 反向解析是通过PTR记录实现的。PTR记录是一种DNS资源记录,用于将IP地址映射到域名。在反向解析中,DNS服务器会查询反向解析区域文件,查找与该IP地址对应的PTR记录,并返回对应的域名。 例如,假设有一个IP地址为192.168.1.1的主机,其域名为example.com。如果要进行反向解析,需要在DNS服务器中添加一个反向解析区域,将192.168.1.0/24网段的IP地址与域名进行映射。反向解析区域的格式为1.168.192.in-addr.arpa,其中1表示主机位,168.192表示网络位。 在反向解析区域文件中,需要添加一个PTR记录,将192.168.1.1映射到example.com。文件内容如下: ``` $TTL 604800 @ IN SOA ns1.example.com. admin.example.com. ( 1 ; Serial 604800 ; Refresh 86400 ; Retry 2419200 ; Expire 604800 ) ; Negative Cache TTL ; @ IN NS ns1.example.com. @ IN NS ns2.example.com. 1 IN PTR example.com. ``` 上述内容表示将IP地址为192.168.1.1的主机映射到example.com域名。PTR记录的格式为IP地址反转后加上.in-addr.arpa后缀,例如1.168.192.in-addr.arpa。 要测试反向解析是否正常工作,可以使用nslookup命令查询IP地址对应的域名,例如: ``` nslookup 192.168.1.1 ``` 如果返回以下结果,则表示反向解析正常工作: ``` Server: 192.168.1.10 Address: 192.168.1.10#53 1.1.168.192.in-addr.arpa name = example.com. ``` 注意:反向解析只能查询IP地址的PTR记录,而不能查询其他类型的DNS记录,例如A记录或MX记录。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值