DNS反向查询
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反向查询的更多相关文章
- DNS BIND配置 配置基本缓存服务器 DNS正向解析 DNS反向解析
一. 缓存服务器配置 1.DNS:BIND Berkeley Internet Name Domain 版本bind97: RPM服务器端包的名字 安装bind-libs bind ...
- django ORM model filter 条件过滤,及多表连接查询、反向查询,某字段的distinct
版权归作者所有,任何形式转载请联系作者.作者:petanne(来自豆瓣)来源:https://www.douban.com/note/301166150/ 1.多表连接查询:感觉django太NX了. ...
- django xadmin多对多字段过滤(含filter的反向查询)
要实现的功能: 继昨天实现拓展User模型使其得到其上级用户,今天要实现某些模型与用户多对多字段过滤功能. 功能描述:以用户指派功能为例,当前用户将文件指派给多个下级,修改前 程序会将所有用户都显示出 ...
- Django ORM 反向查询
一/一对多反向查询 先定义两个模型,一个是A,一个是B,是一对多的类型. class A(models.Model): name= models.CharField('名称', max_lengt ...
- ORM查询之基于对象的正向查询与反向查询
一.为什么有正向查询和反向查询? 举例有两张表,一张表叫书籍表,一张表叫出版社表,他们关系是一对多的关系,书籍是多,出版社是一,因为一本书应该只有一个出版社对应,而出版社可以有多本书对应. 那么在实际 ...
- ORM正向和反向查询
表结构 from django.db import models # Create your models here.class Publisher(models.Model): id = model ...
- (19)模型层 -ORM之msql 跨表查询(正向和反向查询)
基于对象的跨表查询 基于对象的跨表查询'''正向和反向查询'''# 正向 ----> 关联字段在当前表中,从当前表向外查叫正向# 反向 ---> 关联字段不在当前表中,当当前表向外查叫反向 ...
- ORM 创建manytomay的三种方法 反向查询 和一些 双下方法版学员管理系统3
老师信息管理 三种创建多对对外键的方式常用第二种和第三种 思考 三种方式创建多对多外键方式及其优缺点. 外键的查询和使用 1外键的创建: 在数据库表中的表现形式 如何连表查询和使用 表里边: s ...
- bbs项目中对反向查询和分组查询的具体的应用
我的数据库是按照下面的图片的方式设计的 然后看下model中代码 class User(models.Model): uid = models.AutoField(primary_key=True) ...
随机推荐
- Jmeter接口测试,往MySQL数据库写数据时,中文显示???
调Jmeter接口测试,请求字段输入中文,查看数据库插入情况, 发现数据库显示 ???
- ImageLoader在Gridview中的使用
原理和ImageLoader在Listview中的使用一样,只有下面的几点变化 主页面的布局 <?xml version="1.0" encoding="utf-8 ...
- 如何修改linux下tomcat指定的jdk路径
一般情况下,一台服务器只跑一个项目,只需根据所需项目,将linux默认的jdk环境配置好即可.某些时候一台服务器上会跑多个项目,而且各个项目需要的JDK版本各不相同,或者为了使业务独立开来,需要指定T ...
- springboot使用多个@RestControllerAdvice时的拦截顺序
我们的项目中经常会使用到别人的模块,例如我的项目demo,要依赖别人的A模块,以及基础的核心core模块,此时core模块有一个使用了@RestControllerAdvice的类,负责拦截所有的co ...
- EFCore-一对一配置外键小记2
前后两次遇到这样的错误: The property 'xx' on entity type 'xxxx' has a temporary value. Either set a permanent v ...
- 懂了!VMware/KVM/Docker原来是这么回事儿
云计算时代,计算资源如同小马哥当年所言,已经成为了互联网上的水和电. 虚拟主机.web服务器.数据库.对象存储等等各种服务我们都可以通过各种各样的云平台来完成. 而在云计算欣欣向荣的背后,有一个重要的 ...
- python用类的方式创建线程---自创建类
用类的方式创建线程---自创建类 import threadingimport time class MyThread(threading.Thread):#自建MyThread类继承threadin ...
- Dubbo 负载均衡的实现
前言 负载均衡是指在集群中,将多个数据请求分散在不同单元上进行执行,主要为了提高系统容错能力和加强系统对数据的处理能力. 在 Dubbo 中,一次服务的调用就是对所有实体域 Invoker 的一次筛选 ...
- td文字溢出显示省略号
昨天遇到移动端表格td中文字溢出问题,写了溢出隐藏样式,居然没起作用! { overflow:hidden;//溢出隐藏 white-space:nowrap;//文字不换行 text-overflo ...
- vue页面原样导出excel表格
github地址:https://github.com/wuzhiaite/vue-samples 1.excel导出 做过业务系统的知道,进行涉及到excel的导出,列表数据动则几十万,但是也有一部 ...