![反向 DNS 后获取 IP 网络范围?](https://linux22.com/image/634689/%E5%8F%8D%E5%90%91%20DNS%20%E5%90%8E%E8%8E%B7%E5%8F%96%20IP%20%E7%BD%91%E7%BB%9C%E8%8C%83%E5%9B%B4%EF%BC%9F.png)
为了进行分析,我查看了服务器日志文件中的大量 IP 地址。我尝试执行反向 DNS 查找,以了解流量来自何处 - 例如,有多少百分比的 IP 解析为公司、学校、政府、国际等。
尽管优化,但单独对每个 IP 地址进行反向 DNS 似乎仍然相当昂贵。因此 -
有没有办法获得整个范围来自反向 DNS 的 IP 吗?
如果是,这可以大大减少实际的反向 DNS 查找次数。
示例(数字略有混淆):
- 日志文件包含来自 IP 的请求
128.151.162.17
- 反向 DNS 解析为
11.142.152.128.in-addr.arpa 21599 IN PTR alamo.ceas.rochester.edu
- (这是来自罗彻斯特大学 (rochester.edu) 的访客)
- 现在,是否可以安全地假设至少所有来自的 IP
128.151.162.*
都将解析为 rochester.edu? - 那怎么办
128.151.*.*
?有没有办法获取准确的 IP 范围?
答案1
有没有办法从反向 DNS 获取整个 IP 范围?
不是,不是;在极少数情况下,您可能能够执行 DNS 区域传输查询以获取区域中的所有记录(通常是整个 /24),但您查询的名称服务器响应此请求的可能性非常低。对于反向 DNS,每个地址预计只有一个查询(抱歉!)。
现在,是否可以安全地假设至少所有来自 128.151.162.* 的 IP 也将解析为 rochester.edu?
一般来说,大概,作为一所大学,他们可能拥有整个 /24。但是,这不是一个适用于一般情况的好规则;较小的学校可能没有整个 /24,或者可能没有反向 DNS。
反向 DNS 本身会非常不稳定 - 在许多情况下,它只是根据 ISP 的主机名生成名称,或者根本没有记录。为了获得更好的数据,我们将使价格更加昂贵 - 您还应该查看 whois 中的数据。
例如,以下是来自 Rochester IP 的信息- 它显示分配的大小(整个 /16 范围,因此在这种情况下适用于128.151.*.*
)以及分配给它的组织。
whois 信息应该能为您提供所需信息的真实来源,并且其优点是能够看到适用的范围。缺点是,对于较小的分配,范围通常只会显示为属于 ISP,而不是最终客户。结合 whois 和反向 DNS 应该能提供最佳信息(但速度会非常慢)。
答案2
您通常可以从 whois 获取有关网络块的信息(例如,whois 128.151.162.17
请参阅CIDR: 128.151.0.0/16
),但您可能会发现,根据所涉及的注册表,您获得的响应格式会有所不同,而且 whois 服务器可能会限制您可以发出的请求数量。另请注意,网络块通常嵌套在较大的网络块中,较小的网络块嵌套在较大的网络块中,因此您可能会获得有关一个 IP 的多个网络块的信息。
DNS 请求包可以包含多个请求,如果您需要解决大量请求,这可能会加快速度,但您需要的主要技术是并行请求和缓存响应。
答案3
关于此类算法的一般建议:
通常,您会发现数据几乎可以无限缓存。数据很少发生变化,因此您不妨批量处理并将数据保存到所有代码使用的磁盘缓存中。数据的 TTL 可能为 1 小时,但当我在互联网地图项目上时,我们发现就域变化而言,数据可以稳定超过一年。
如果您要进行大量 DNS 查询,请限制发送到特定 DNS 服务器的查询次数。否则,这充其量是粗鲁的,最坏的情况是 DoS 攻击。
- 如果您可以提前生成所有计划执行的 DNS 查询,并且它们适合 RAM 或磁盘,请生成列表、将其随机化,然后按随机顺序进行查找。
- 一种偷懒的方法不需要提前枚举每个查询,而是将查询分散到所有 CIDR 块中。也就是说,如果您要执行 500 个 CIDR 块,则在所有块中执行 .1 地址,然后在所有块中执行 .2 地址,然后执行 .3 地址,等等。结果是您对单个 DNS 服务器的压力较小。(如果您在数百万个 CIDR 块上执行数千次查找,这种方法尤其有效)
如果您“按需”进行查找,只需使用某种写入缓存就可以了。