DNS反向查询是什么

DNS反向查询大概的一个定义就是:

从 IP 地址获取 PTR 记录。也就是说,通过使用一些网络工具可以将 IP 地址转换为主机名。 实际上,PRT 代表 POINTER,在 DNS 系统有唯一性,将 IP 地址与规范化的主机名联系起来。PTR 记录其实是 NDS 系统的一部分,但是由专门的区域文件组成的,使用的是传统的 in-addr.arpa 格式。

最简单的理解就是使用一个在线服务来查询一个IP对应的域名服务

原理就是 dig -x ip

➜  ~ dig -x 192.30.252.153

...

;; ANSWER SECTION:
153.252.30.192.in-addr.arpa. 3505 IN PTR lb-192-30-252-153-iad.github.com. ...

反向查询的一个应用,是可以防止垃圾邮件,即验证发送邮件的IP地址,是否真的有它所声称的域名,如果反向查询和声称不一致,那么就可以认为有风险。

注意:

反向查询是根据一个资源记录查询域名,不一定是IP。这个资源记录可能是A记录,也可能是CNAME记录或者MX记录(见“DNS开源服务器BIND最小配置详解”),而PTR记录用于从IP地址反查域名。

DNS反向查询的使用场景

  • rDNS的最初用途:通过traceroute,ping和SMTP电子邮件的“Received:”跟踪标题字段进行网络故障排除,网站跟踪用户(特别是在Internet论坛上)等。

  • 一种电子邮件反垃圾邮件技术:检查rDNS中的域名是否可能来自拨号用户,或动态分配的地址不太可能被合法邮件服务器使用。这些IP地址的所有者通常会为其分配通用的rDNS名称,例如“1-2-3-4-dynamic-ip.example.com”。一些反垃圾邮件过滤器假设来自这些地址的电子邮件可能是垃圾邮件,并可能拒绝连接。

  • 向确认反向DNS(FCrDNS)验证可以创建验证的形式示出了域名的所有者,并且已经在给定IP地址的服务器的所有者之间的关系有效。虽然不是很正全面,但这种验证足够强大,经常用于白名单目的,因为垃圾邮件制造者和钓鱼者在使用僵尸计算机伪造域记录时通常无法实现前向验证。

  • 系统日志记录或监视工具通常会接收仅由IP地址指定的相关设备的条目。为了提供更多可用的数据,这些程序通常在写入日志之前执行反向查找,从而写入名称而不是IP地址。

从使用场景中也能发现这个技术点也是攻守双方博弈的战场,防守方通过反向查询来确认攻击方的信息,而攻击方为了隐藏自己的信息,也会让反向查询得到的域名并不是真实的,因为攻击者会在反向查找的记录中插入伪造的数据,达到迷惑的作用。

实验

为了加强理解,我写了段py代码来帮助理解

import sys
import socket try:
# gethostbyaddr的作用是通过IPv4的地址来获取主机信息,并放在hostent结构体中
result = socket.gethostbyaddr(sys.argv[1]) # 显示查找到的主机名
print("Primary hostname: " + result[0]) # 显示还返回的可用地址列表
print("Addresses: ")
for item in result[2]:
print(" " + item)
except socket.error as e:
print("Failed to look up hostname:", e)

运行:查询 127.0.0.1 ,得到了主机名

(python3) ➜  dns_anti_found python foundip.py 127.0.0.1
Primary hostname: localhost
Addresses:
127.0.0.1

运行:查询百度的ip 115.239.211.110,发现是Unknown host

(python3) ➜  dns_anti_found python foundip.py 115.239.211.110
Failed to look up hostname: [Errno 1] Unknown host

我猜测,不是每一个IP地址都存在反向的映射(事实上很多IP地址就没有对应的域名),后面查了一下,发现这个猜测是错误的,

手动在/etc/hosts下增加一下映射



发现能查询出来了

查询网上资料之后,得出结论,要使用socket.gethostXxx( )函数,本地要有反向解析的服务。如果你使用的不是服务器,是没有反向解析服务的,如果你使用本地电脑,肯定没有域名解析服服务。那么 本地的/etc/hosts就会提供DNS服务。你添加上记录,那么能查询出来,你没添加上去,那么就什么都没有,只能报错了。

参考

https://www.cnblogs.com/wunaozai/p/3753731.html

https://www.dnsqueries.com/zh/reverse_lookup.php

https://blog.csdn.net/t_tzz/article/details/79779226

DNS反向查询的更多相关文章

  1. DNS BIND配置 配置基本缓存服务器 DNS正向解析 DNS反向解析

    一. 缓存服务器配置 1.DNS:BIND    Berkeley Internet Name Domain    版本bind97: RPM服务器端包的名字  安装bind-libs    bind ...

  2. django ORM model filter 条件过滤,及多表连接查询、反向查询,某字段的distinct

    版权归作者所有,任何形式转载请联系作者.作者:petanne(来自豆瓣)来源:https://www.douban.com/note/301166150/ 1.多表连接查询:感觉django太NX了. ...

  3. django xadmin多对多字段过滤(含filter的反向查询)

    要实现的功能: 继昨天实现拓展User模型使其得到其上级用户,今天要实现某些模型与用户多对多字段过滤功能. 功能描述:以用户指派功能为例,当前用户将文件指派给多个下级,修改前 程序会将所有用户都显示出 ...

  4. Django ORM 反向查询

    一/一对多反向查询   先定义两个模型,一个是A,一个是B,是一对多的类型. class A(models.Model): name= models.CharField('名称', max_lengt ...

  5. ORM查询之基于对象的正向查询与反向查询

    一.为什么有正向查询和反向查询? 举例有两张表,一张表叫书籍表,一张表叫出版社表,他们关系是一对多的关系,书籍是多,出版社是一,因为一本书应该只有一个出版社对应,而出版社可以有多本书对应. 那么在实际 ...

  6. ORM正向和反向查询

    表结构 from django.db import models # Create your models here.class Publisher(models.Model): id = model ...

  7. (19)模型层 -ORM之msql 跨表查询(正向和反向查询)

    基于对象的跨表查询 基于对象的跨表查询'''正向和反向查询'''# 正向 ----> 关联字段在当前表中,从当前表向外查叫正向# 反向 ---> 关联字段不在当前表中,当当前表向外查叫反向 ...

  8. ORM 创建manytomay的三种方法 反向查询 和一些 双下方法版学员管理系统3

    老师信息管理   三种创建多对对外键的方式常用第二种和第三种 思考 三种方式创建多对多外键方式及其优缺点. 外键的查询和使用 1外键的创建: 在数据库表中的表现形式 如何连表查询和使用 表里边:  s ...

  9. bbs项目中对反向查询和分组查询的具体的应用

    我的数据库是按照下面的图片的方式设计的 然后看下model中代码 class User(models.Model): uid = models.AutoField(primary_key=True) ...

随机推荐

  1. Java中的四种引用方式

      无论是通过引用计数算法判断对象的引用数量,还是通过可达性分析算法判断对象的引用链是否可达,判定对象是否存活都与"引用"有关.在Java语言中,将引用又分为强引用.软引用.弱引用 ...

  2. ImageLoader在Gridview中的使用

    原理和ImageLoader在Listview中的使用一样,只有下面的几点变化 主页面的布局 <?xml version="1.0" encoding="utf-8 ...

  3. 【秒懂Java】【第1章_初识Java】01_编程语言

    各位小伙伴们好哇!从今日起,我将开始更新<秒懂Java>系列文章,从0开始讲解Java的方方面面,后面也将推出配套的视频版,欢迎大家保持关注! 我会尽力办到:在保证通俗易懂的同时,不丢失知 ...

  4. 错误C2280 Union:尝试引用已删除的函数

    在编写Union共用体类型的时候,写了如下代码,在第5行出现错误: #include <iostream> #include <string> using namespace ...

  5. Visual C++线程同步技术剖析:临界区,时间,信号量,互斥量

    使线程同步 在程序中使用多线程时,一般很少有多个线程能在其生命期内进行完全独立的操作.更多的情况是一些线程进行某些处理操作,而其他的线程必须对其处理结果进行了解.正常情况下对这种处理结果的了解应当在其 ...

  6. Oracle 11g各种服务作用以及哪些需要开启

    Windwos server 2012 R2上成功安装Oracle 11g后共有7个服务,如果全局数据库名为orcl,则Oracle服务分别为 Oracle ORCL VSSWriter Servic ...

  7. hive中标准偏差函数stddev()详细讲解

    1.标准偏差概念 标准偏差(Std Dev,Standard Deviation) -统计学名词.一种度量数据分布的分散程度之标准,用以衡量数据值偏离算术平均值的程度.标准偏差越小,这些值偏离平均值就 ...

  8. 错误记录-MySql.Data.MySqlClient.MySqlException (0x80004005): Timeout expired.

    -- ::25.026 +: [ERR] Connection id "0HLQH64H76UL5", Request id "0HLQH64H76UL5:0000000 ...

  9. (私人收藏)Vue.js手册及教程

    (私人收藏)Vue.js手册及教程 https://pan.baidu.com/s/1XG1XdbbdBQm7cyhQKUIrRQ5lrt Vue.js手册及教程 Vue.js 教程 Vue.js 安 ...

  10. 为什么是link-visited-hover-active原理这样的特殊

    前言 通常我们在设置链接的一些伪类(link,visited,hover,active)样式时,要让不同的状态显示正确的样式,我们需要按一定的顺序设置这些伪类的样式.这里我就按css2规范中推荐的顺序 ...