IP-Domain映射关系
前言:
一般情况,ping域名可以获得ip地址,但是通过ip地址很多时候是没有办法获得对应域名,尤其是在判断虚拟主机的情况下,往往需要知道一个ip上绑定的所有域名列表。
早年都是利用bing的服务,直接输入ip:地址,即可获得bing收录的该ip对应的所有域名信息。但是bing已经将接口,进行了处理,需要注册、登录才能使用对应的api,还有次数限制,非常麻烦。因此,想做一个自己的api,功能很简单,输入ip,获得对应的所有域名信息。即:
功能1:
输入:IP
输出: ip对应的所有域名列表
对一个域名进行渗透测试,往往是收集其子域名,寻找最弱的薄弱站点,因此对一个域名的所有子域名收集,是非常有帮助的,因此功能2:
输入:域名
输出: 该域名所有的子域名信息
设计:
利用有限资源处理大数据,基本思想,大数据化小,分而治之
- 收集所有的域名列表,包括网络和自身抓取过的
- 将域名遍历一遍,取域名主域名为key(过滤掉无效域名),多级域名为value,输入到bsddb中存储
- 遍历数据库中主域名,取出所有子域名 和 子域名列表进行并操作,生成待判断ip的域名列表,加入到队列中
- 整合https://github.com/ring04h/wydomain/blob/wydomain2/dnsburte.py 实现完全自动化探测,将结果保存到文件中
- 整个扫描结束后,将ip和域名对应关系,域名和子域名对应关系,分别保存到两个bsddb数据库中,ip由于列表较大,可能分为255个数据库
- 更新api接口的数据库指向,完成自动切换到最新数据库
goto 1 进行循环抓取
进行中:
一、整理目前的所有域名列表(ok)
F:\share
提取两部分域名,为最终所有的域名列表,保存到文本文件中(ok)
二、域名遍历
去掉重复域名将子域名
将域名和ip关系遍历一遍 保存地址 f:\ip\domain下面
分两部分,ip列表 放到 f:\iplist 下每个ip1为一个文件,保存根据ip存储的信息,后期会做成根据ip找域名功能
f:\alldomain\alldomaindb.db
f:\alldomain\newdb.db
保存以域名\\(反序\\)为key的记录信息,主要为子域名服务。最终保存成,主域名为key,子域名为value形式,主要作为子域名查询功能
详细设计:
输入文件夹 input,每个文件每行一个有效的域名
功能1:遍历input,读完每个文件每行,1kw条记录为一个bsddb文件存储(dbfiles),包括去重,和域名反序为key保存,对域名实现初步去重,更加快速
功能2:遍历dbfiles 分别从每个db取一个域名,获得最小主域名(注意反序), 依次读取其它db文件该域名的子域名或主域名,(类似外部排序), 直到获得当前域名所有子域名为止,
功能3:当前域名子域名列表和扫描域名的子域名列表,生成当前域名待扫描域名完整域名列表送入扫描队列,等待扫描
功能4:开始多线程,获得域名对应ip地址,结果为每个ip,域名 一行的文件
功能5: 结果文件进行处理,ip分别存入iplist文件夹下,每个ip1为文件名,域名每1kw 反序存入一个db文件(dbfiles)
功能6:将iplist下文件生成本次的ip查询域名库,将dbfiles 下文件存入db,作为本次域名查询子域名的db文件list goto3
参考文献:
Top3000子域名
http://www.219.me/posts/2822.html
子域名暴力破解
https://github.com/ring04h/wydomain
dnspython python查询dns库