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. 经典卷积神经网络算法(5):ResNet

    .caret, .dropup > .btn > .caret { border-top-color: #000 !important; } .label { border: 1px so ...

  2. java基础-java与c#的可变参数

    正文 可变参数,必须最为参数的最后一个参数:可变参数只能有一个: c#可变参数例子:       class Program { static void Main(string[] args) { T ...

  3. Python3-hashlib模块-加密算法之安全哈希

    Python3中的hashlib模块提供了多个不同的安全哈希算法的通用接口 hashlib模块代替了Python2中的md5和sham模块,使用这个模块一般分为3步 1.创建一个哈希对象,使用哈希算法 ...

  4. .net core 使用Tu Share获取股票交易数据

     一.什么是Tu Share Tushare是一个免费.开源的python财经数据接口包.主要实现对股票等金融数据从数据采集.清洗加工 到 数据存储的过程,用户可以免费(部分数据的下载有积分限制)的通 ...

  5. Python基础语法一

    所有内容都在代码上,有相关代码注释 # #代表注释 # 区分大小写.以回车换行结束 # 多行编写可以使用反斜杠 \ # 缩进代表一个代码块 #数值 #int类型可以使用下划线分割 c=123_456_ ...

  6. caffe的python接口学习(1)生成配置文件

    ---恢复内容开始--- 看了denny的博客,写下自己觉得简短有用的部分 想用caffe训练数据首先要学会编写配置文件: (即便是用别人训练好的模型也要进行微调的,所以此关不可跨越) 代码就不粘贴了 ...

  7. git和github入门指南(3.3)

    3.4.开源项目的协作方式 开源项目通常是没有写入的权限的,我们需要换一种协作方式参与到这些开源项目中 为了演示方便,我们把git-demo这个项目中nd-00002这个合作者的权限取消 接下来nd- ...

  8. CSS背景颜色透明

    { filter:alpha(opacity=50); -moz-opacity:0.5; -khtml-opacity: 0.5; opacity: 0.5; } 兼容大部分主流浏览器 filter ...

  9. 「MoreThanJava」Day2:变量、数据类型和运算符

    「MoreThanJava」 宣扬的是 「学习,不止 CODE」,本系列 Java 基础教程是自己在结合各方面的知识之后,对 Java 基础的一个总回顾,旨在 「帮助新朋友快速高质量的学习」. 当然 ...

  10. 如何修复 WordPress 中的 HTTP 错误

    如何修复我们会向你介绍,如何在 Linux VPS 上修复 WordPress 中的 HTTP 错误. 下面列出了 WordPress 用户遇到的最常见的 HTTP 错误,我们的建议侧重于如何发现错误 ...