基础学习记录——TTL、泛解析与子域名收集

前言:对TTL一直比较模糊,之前学过也忘得差不多了,今天正好看到了子域名收集时使用泛解析判断子域名是否为泛解析,记录下。

TTL是什么

这里的TTL指的是DNS TTL,TTL与DNS TTL有区别。二者都是生存时间,前者指ICMP包的转发次数(跳数),后者指域名解析信息在DNS中的存在时间。

IP数据包中的TTL

在IPv4包头中TTL是一个8 bit字段,它位于IPv4包的第9个字节。如下图所示,每

一行表示 32 bit(4字节),位从0开始编号,即0~31。

TTL的作用是限制IP数据包在计算机网络中的存在的时间。TTL的最大值是255,TTL的一个推荐值是64。

虽然TTL从字面上翻译,是可以存活的时间,但实际上TTL是IP数据包在计算机网络中可以转发的最大跳数。TTL字段由IP数据包的发送者设置,在IP数据包从源到目的的整个转发路径上,每经过一个路由器,路由器都会修改这个TTL字段值,具体的做法是把该TTL的值减1,然后再将IP包转发出去。如果在IP包到达目的IP之前,TTL减少为0,路由器将会丢弃收到的TTL=0的IP包并向IP包的发送者发送 ICMP time exceeded消息。

TTL的主要作用是避免IP包在网络中的无限循环和收发,节省了网络资源,并能使IP包的发送者能收到告警消息。

TTL 是由发送主机设置的,以防止数据包不断在IP互联网络上永不终止地循环。转发IP数据包时,要求路由器至少将 TTL 减小 1。

TTL值的注册表位置HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters 其中有个DefaultTTL的DWORD值,其数据就是默认的TTL值了,我们可以修改,但不能大于十进制的255。Windows系统设置后重启才生效。

DNS TTL

以我的博客域名为例

我这里设定的TTL值为10分钟,那么这个值有什么用呢?

在从域名解析到ip的整个过程中,当用户使用浏览器访问我的域名ahui.blog

一、首先浏览器检查自身的DNS缓存,缓存时间约为1分钟。

二、操作系统查找自身的DNS缓存,如果没有找到,则到本地hosts文件中查找。

三、如果还没有找到,那么系统会通过系统设定的本地DNS服务器查询ahui.blog域名的DNS解析记录,本地DNS服务器会检查自身的缓存中有没有相应记录。

四、如果本地DNS缓存中没有相应记录,那么会通过全球DNS递归查询

以上过程中,如果在第四步中找到了,那么本地DNS服务器会缓存该域名的解析记录,缓存的时间就是设置的TTL值,例如我的域名设定TTL值为10分钟,那么本地DNS服务器就会缓存该记录10分钟的时间,在10分钟内,如果用户在请求该域名,则本地DNS服务器直接返回该缓存记录。

这也是为什么TTL值和解析记录更新时间有关系,因为TTL值越大,DNS服务器缓存该记录的时间越久,更改解析记录的话,需要DNS服务器中的缓存失效后,才会重新向全球DNS服务器重新查询。

泛解析

在域名前添加任何子域名,均可访问到所指向的WEB地址。也就是客户的域名ahui.blog之下所设的*.ahui.blog全部解析到相同IP。

例如a.ahui.blog和b.ahui.blog以及任何*.ahui.blog都解析到同一个IP,这个就叫做域名泛解析。

使用不存在的子域名获取ip黑名单

使用md5(aaaahui).ahui.blog来测试,如果解析到对应ip,则标记该IP为黑名单,当其他子域名再解析到该IP时,为防止误报,需要进一步验证是否为泛解析,将TTL值作为黑名单规则的一部分,如果TTL值不同,则子域名存在,不是泛解析。