欢迎来到 黑吧安全网 聚焦网络安全前沿资讯,精华内容,交流技术心得!

Python安全工具源码分析:wydomain

来源:本站整理 作者:佚名 时间:2019-06-11 TAG: 我要投稿

wydomain是猪猪侠开发的一款子域名信息搜集工具,因其枚举速度快,结果准确,成为不少白帽居家旅行的必备神器。工具主要分为两个模块,dnsburte模块和wydomain模块,dnsburte模块通过用户自定义字典发送dns查询,最后筛选出符合条件的域名。而wydomain模块则是通过调用多个第三方网站的公开api获取子域名数据。
工具目录:
. # 目录由tree生成├── captcha.py # 验证码识别├── common.py # 发送http请求├── config.py # 主配置文件├── default.csv # 默认字典├── dnsburte.py  # dnsburte模块通过用户自定义字典发送dns查询,最后筛选出符合条件的域名。├── dnspod.csv # dnspod子域名字典├── domains.log├── ph_cookie.js├── README.md├── requirements.txt # 依赖库├── result # 子域名枚举结果文件夹│   ├── aliyun.com│   │   ├── alexa.json│   │   ├── chaxunla.json│   │   ├── dnsburte.json│   │   ├── googlect_dnsnames.json│   │   ├── googlect_subject.json│   │   ├── ilinks.json│   │   ├── netcraft.json│   │   ├── sitedossier.json│   │   ├── threatcrowd.json│   │   └── threatminer.json│   └── weibo.com│       ├── alexa.json│       ├── chaxunla.json│       ├── dnsburte.json│       ├── googlect_dnsnames.json│       ├── googlect_subject.json│       ├── ilinks.json│       ├── netcraft.json│       ├── sitedossier.json│       ├── threatcrowd.json│       └── threatminer.json├── tools│   ├── __init__.py│   └── skynet.py├── upload.py├── utils  # 第三方网站查询模块│   ├── alexa.py│   ├── chaxunla.py│   ├── fileutils.py│   ├── googlect.py│   ├── ilinks.py│   ├── __init__.py│   ├── netcraft.py│   ├── passivetotal.py│   ├── sitedossier.py│   ├── threatcrowd.py│   └── threatminer.py├── weibo_domains.log├── wydomain.csv # wydomain 字典└── wydomain.py # dnsburte模块通过用户自定义字典发送dns查询,最后筛选出符合条件的域名。​5 directories, 47 files
项目地址:https://github.com/ring04h/wydomain
dnsburte模块
主运行流程
脚本直接运行 > parser_args命令行参数获取用户输入 > 传入主函数run > 根据传入的参数,生成DomainFuzzer类的实例 > 调用DomainFuzzer类实例的run方法 > 获取返回的数据写入到空列表subdomains里 > 调用save_result函数将列表中的内容写入到json文件。
在逐个拆解代码块分析之前,最好能够大致浏览一下脚本里都定义了哪些函数,哪些类,调用了哪些python标准模块,第三方模块,以及作者是否自己编写了模块。通过函数名称,类名称及作者的注释可以快速理解部分代码块的主要作用。
python标准模块:
import timeimport reimport osimport sysimport jsonimport Queueimport randomimport loggingimport argparseimport threading
python第三方模块:
import dns.queryimport dns.resolverimport dns.rdatatype
作者自定义模块:
from common import save_resultfrom utils.fileutils import FileUtils
自定义函数:
run()
自定义类:
Domain()DomainFuzzer()    bruteWorker(threading.Thread)
全局变量:
logging.basicConfig( # logging模块基础配置文件    level=logging.INFO,     format='%(asctime)s [%(levelname)s] %(message)s',)​nameservers = [  # 公共dns列表    '119.29.29.29', '182.254.116.116',    '8.8.8.8', '8.8.4.4',    '180.76.76.76',    '1.2.4.8', '210.2.4.8',    '101.226.4.6', '218.30.118.6',    '8.26.56.26', '8.20.247.20']
代码段分析
当dnsburte模块被用户直接运行时,作者通过使用argparse模块从用户终端获取命令行参数,最后将获取到的参数传入到主函数run()里。
if __name__ == '__main__':    parser = argparse.ArgumentParser(description="wydomian v 2.0 to bruteforce subdomains of your target domain.")    parser.add_argument("-t","--thread",metavar="",default=16, # 线程数        help="thread count")    parser.add_argument("-time","--timeout",metavar="",default=5, # 超时时间        help="query timeout")    parser.add_argument("-d","--domain",metavar="",  # 目标域名        help="domain name")    parser.add_argument("-f","--file",metavar="",default="wydomain.csv",  # 字典        help="subdomains dict file name")    parser.add_argument("-o","--out",metavar="",default="bruteforce.log", # 结果        help="result out file")    args = parser.parse_args() # 将命令行参数传递到run函数。    try:        run(args)    except KeyboardInterrupt:        logging.info("Ctrl C - Stopping Client")        sys.exit(1)

[1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16]  下一页

【声明】:黑吧安全网(http://www.myhack58.com)登载此文出于传递更多信息之目的,并不代表本站赞同其观点和对其真实性负责,仅适于网络安全技术爱好者学习研究使用,学习中请遵循国家相关法律法规。如有问题请联系我们,联系邮箱admin@myhack58.com,我们会在最短的时间内进行处理。
  • 最新更新
    • 相关阅读
      • 本类热门
        • 最近下载