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. soapUI使用小结(一)

    本篇博客是照搬虫师的<Web接口开发与自动化测试>一书的soapUI测试工具一节 以及博文http://blog.csdn.net/a19881029/article/details/26 ...

  2. cf # 420 div.2

    说说题吧前两道暴力 a直接枚举每个位置然后枚举所在行和列 b直接枚举所有的x的banana 的数量.计算方式等差数列求和小学生难度.记得long long.int转longlong c记下remove ...

  3. dart快速入门教程 (4)

    4.流程控制 4.1.分支结构 1.if语句 void main() { int score = 80; if (score >= 90) { print('优秀'); } else if (s ...

  4. node+ajax实战案例(1)

    1.mysql入门 1.1.数据库相关概念 1.1.1.什么是数据? 描述事物的符号记录称为数据,描述事物的符号可以是数字.文字.声音.图片.视频等,有多种表现形式,都可以经过数字化后存入计算机 1. ...

  5. Nginx详细介绍

    1.Nginx是什么? Nginx就是反向代理服务器. 首先我们先来看看什么是代理服务器,代理服务器一般是指局域网内部的机器通过代理服务发送请求到互联网上的服务器,代理服务器一般作用于客户端.比如Go ...

  6. 宿主机ping不通虚拟机,虚拟机能ping通宿主机问题

    打开虚拟机管理器,点开设置=>网络,网络选的是NAT,所以宿主机不能直接ping能虚拟机!!! 问题描述 查看虚拟机ip,  #ifconfig如下图: 宿主机ping虚拟机ip,无法通信,如下 ...

  7. 发家致富的鬼bug。让人心动

    这个bug是我目前见过最离谱的bug…… 颠覆了我二十多年的世界观,天上掉馅饼这种好事第一次砸我身上(雾),至今我都没想明白其中的原理. 情况是这样的,去年我出门去外地有些事情要处理.由于要呆很长时间 ...

  8. Linux必须要掌握的命令

    Linux必须要掌握的命令 文件目录操作命令 ls 命令格式:ls [选项] [目录名] 命令功能:列出目标目录中所有的子目录和文件 常用参数:-a,-l,-R, 例1:列出/home/peidach ...

  9. web前端知识点(JavaScript篇)

    call,apply,bind call,apply,bind这三者的区别,及内部实现原理,点这里 promise promise函数的内部实现原理,点这里 闭包 闭包就是能够读取其他函数内部变量的函 ...

  10. 6.28日模拟考试总结(T1:翻转游戏;T2:抢掠计划,T3:测绘,T4:奖学金)

    今天的考试有结束了,又一次被右边的同桌虐了(额,排名第三的大佬)但是考试还是进步了一名,算是有进步吧 成绩: 那个12名就是我,一个AC都没有,太难受了. T1: 题目链接:http://hzoi.c ...