长亭百川云 - 文章详情

如何搭建一个自己的DNS域名检索系统

安全树洞

53

2024-07-13

最近看到一个查找子域名的平台

https://rapiddns.io/   

数据来源于opendata.rapid7.com 

这个方法之前在DC0531安全沙龙上简单提到过一次,自己也一直在用。

https://www.ichunqiu.com/open/63178

突然看到有师傅提供一个外网的查询平台,还是比较开心的(不用命令行啦!

不过使用后发现还是有一点点不足:查询的数据少了一点,好像是因为没有把关键词放到别名中进行模糊查询(小问题。

正好我也开发了自用的平台,记录一下过程分享出来。

 需要的东西 

  • Rapid7 DNS DATA

  • 1T SSD

  • Ubuntu 

  • ClickHouse

  • Flask

大概环境 

我的主机有1T的SSD,直接安装Ubuntu,避免了虚拟机挂载硬盘等问题。

 下载数据 

https://opendata.rapid7.com/sonar.rdns\_v2/

https://opendata.rapid7.com/sonar.fdns\_v2/

不推荐迅雷,下载断断续续的,我这里用Ubuntu上的uGet基本没出过幺蛾子。

安装ClickHouse 

ClickHouse,对我来说比较陌生的名字,Yandex团队的开源数据库作品,速度相当之快。

安装过程,不多介绍。

sudo apt-key adv --keyserver keyserver.ubuntu.com --recv E0C56BD4

 创建数据库 

我们先看下Rapid7的数据结构:

{"timestamp":"1585700616","name":"_mta-sts.0-ml.com","type":"txt","value":"v=spf1 a ?all"}

字段名分别为:timestamp,name,type,value

其实我们真正需要的数据只有name和value,这里的timestamp是Rapid7处理数据的日期并不是域名解析生效的日期,type也不是特别有用,因为解析方式我们基本上看也可以看出来,因此导入数据的时候,可以选择性的导入也可以全部导入,我这里还是全部导入了。

在创建数据库选择引擎时要注意,默认创建数据库时ClickHouse的表引擎一定需要日期字段和主键,其实我们并不需要这两个东西,会浪费存储资源和性能。

CREATE DATABASE dnsRecord ENGINE = Ordinary;

我们这里使用PARTITION BY子句,选择name和value。

导入数据 

ClickHouse支持JSON格式数据的导入

cat *.json | clickhouse-client --password ****** --database=dnsRecord -n --query="SET input_format_skip_unknown_fields=1;INSERT INTO dns FORMAT JSONEachRow"

导入后70亿条数据

 查询 

这里查询时候要注意一点,例如查询baidu.com,不仅要查name,也要查询value

因为有些时候解析方式是cname

select name,value from dns where name like "%baidu.com"

这样两次模糊查询所用的时间为单域名80秒,如果不使用模糊查询则单域名15秒,速度还是不错的。

 Flask 

最终随便弄成平台就方便自己和小伙伴查询了,效果不错,预计一天即可完成全部搭建。

 其他 

1.没啥技术含量。

2.感觉还是自己做一遍更好,不然怎么知道别人的东西哪里好哪里不好呢?

3.这个数据库的用途肯定不止是查域名和IP。

相关推荐
关注或联系我们
添加百川云公众号,移动管理云安全产品
咨询热线:
4000-327-707
百川公众号
百川公众号
百川云客服
百川云客服

Copyright ©2024 北京长亭科技有限公司
icon
京ICP备 2024055124号-2