Linux C/C++下收集指定域名的子域名信息(类似dnsmap实现)

我们知道dnsmap是一个工具,主要用于收集指定域名的子域名信息。它对于渗透测试人员在基础结构安全评估的信息收集和枚举阶段非常有用,可以帮助他们发现目标公司的IP网络地址段、域名等信息。

dnsmap的操作原理

dnsmap(DNS Mapping)是一种将域名解析为特定 IP 地址的技术。其操作原理是通过修改本地 DNS 服务器的配置,将特定的域名解析为固定的 IP 地址。当用户访问这个域名时,本地 DNS 服务器会返回预设的 IP 地址,从而实现跳过原网站、访问特定内容的目的。

DNSMAP 操作的具体步骤如下:

  • 1.修改本地 DNS 服务器配置:在 DNS 服务器上,为需要映射的域名添加一条新的 PTR(Pointer)记录,将该域名指向特定的 IP 地址。这样,当用户查询该域名时,DNS 服务器会返回这个 IP 地址。

  • 2.客户端查询 DNS:当用户访问需要通过 DNSMAP 进行映射的域名时,客户端会向本地 DNS 服务器发起域名查询请求。

  • 3.本地 DNS 服务器响应:本地 DNS 服务器在接收到查询请求后,会在其缓存中查找与该域名相关的 PTR 记录。如果找到了相应的 PTR 记录,本地 DNS 服务器就会返回该记录对应的 IP 地址。如果没有找到相应的记录,本地 DNS 服务器会向上级 DNS
    服务器发起递归查询,直到获取到结果。

  • 4.客户端获取 IP 地址:客户端收到本地 DNS 服务器返回的 IP 地址后,会使用该 IP 地址进行网络请求,从而实现访问特定内容的目的。

Linux下dnsmap的使用

以下是dnsmap在Linux环境下的使用介绍,使用方法:

dnsmap <指定域名>[选项]-w 后加字典文件-r 指定结果用常规格式输出文件-c 指定结果用csv去输出-d 设置延迟-i 设置忽略ip (当你遇到一个虚假ip时很有用)

通过设置dnsmap的选项,可以为其指定子域名的字典、指定保存信息的文件、指定dns请求的间隔时间以及指定忽略结果中的某些信息等。例如:

dnsmap baidu.com -w wordlist.txt

上指令表示使用自定义的wordlist.txt作为dnsmap穷举子域名的字典。如果不使用-w选项,则使用默认的字典。

通过指定保存信息的文件有两种方式,常规方式和csv方式。

dnsmap baidu.com -w wordlist.txt -c reportfile.csv

常规方式:选项-r表示用常规方式保存dnsmap得到的子域信息,常规方式也就是将dnsmap输出的信息原封不动的进行保存。使用-c选项表示以csv方式保存信息。

-r 指定一个目录,将扫描到的结果保存到这个指定的目录中,并以当前时间戳命名。例如:

dnsmap baidu.com -r /tmp/ -d 600

使用-d选项指定一个正整数,使得 dnsmap 在暴力扫面的时候能够周期性的休眠,这样不会占用系统带宽。单位是秒。

使用 dnsmap的优缺点

使用 dnsmap的优缺点如下:
优点:

  • 方便快捷:dnsmap可以直接将域名解析为特定 IP 地址,省去了手动修改 hosts 文件或使用代理软件的步骤,操作更加简便。
  • 灵活性:dnsmap可以针对特定的域名进行映射,可以根据需求灵活配置。
  • 易于管理:dnsmap可以通过修改本地 DNS服务器配置实现,便于管理和维护。

缺点:

  • 安全风险:dnsmap可能会绕过网站的正常访问控制,使用户访问到未经授权的内容,存在一定的安全风险。
  • 稳定性问题:dnsmap依赖于本地 DNS 服务器的缓存,如果缓存更新不及时,可能会导致查询结果不准确。
  • 适用范围有限:dnsmap只能在使用同一本地 DNS 服务器的用户之间实现域名映射,不适用于跨区域、跨网络的用户。

Linux C/C++下收集指定域名的子域名信息

struct dns_discovery_args {FILE * reg_report;FILE * csv_report;char * domain;int nthreads;struct addrinfo * wildcard;
};
...
FILE *parse_args(int argc, char ** argv)
{
...while ((c = getopt(argc, argv, "r:w:t:c:")) != -1)switch (c) {case 'w':ptr_wl = optarg;break;case 't':SAY("THREADS: %s\n", optarg);dd_args.nthreads = atoi(optarg);break;case 'r':SAY("REGULAR REPORT: %s\n", optarg);dd_args.reg_report = ck_fopen(optarg, "w");break;case 'c':SAY("CSV REPORT: %s\n", optarg);dd_args.csv_report = ck_fopen(optarg, "w");break;default:if (optopt == 'r' || optopt == 'w' || optopt == 't' || optopt == 'c') {fprintf(stderr, "Option -%c requires an argument.\n", optopt);exit(EXIT_FAILURE);}usage();}...return wordlist;
}
void *dns_discovery_thread(void * args);
void dns_discovery(FILE * file, const char * domain);
void resolve_lookup(const char * hostname);
void print_resolve_lookup(const char * hostname, struct addrinfo * res);
void wildcard_detect();
bool compare_hosts(struct addrinfo * host1, struct addrinfo * host2);
bool compare_ai_addr(struct addrinfo * host1, struct addrinfo * host2);
...
int main(int argc, char ** argv) 
{
...if (atexit(cleanup) != 0) {fprintf(stderr, "Cannot set exit function\n");return EXIT_FAILURE;}wordlist = parse_args(argc, argv);   wildcard_detect();if (dd_args.wildcard) {snprintf(hostname, sizeof hostname, "*.%s", dd_args.domain);print_resolve_lookup(hostname, dd_args.wildcard);}threads = (pthread_t *) ck_malloc(dd_args.nthreads * sizeof(pthread_t)); for (i = 0; i < dd_args.nthreads; i++) {if (pthread_create(&threads[i], NULL, dns_discovery_thread, (void *)wordlist) != 0)error("pthread_create");}for (i = 0; i < dd_args.nthreads; i++) {pthread_join(threads[i], NULL);}...
}

运行结果:


If you need the complete source code, please add the WeChat number (c17865354792)

DNS发现是一个多线程子域生成器,用于测试的初始阶段。它使用一个与给定域连接的单词列表来搜索子域。

DNS发现解析并显示IPv4和IPv6。它类似于其他工具,如dnsmap,但是多线程的。

总结

DNSMAP(DNS Mapping)是一种将域名解析为 IP 地址,同时将 IP 地址映射回域名的技术。

实现 DNSMAP 库需要掌握 C 语言基础、域名解析、DNS 协议、错误处理、线程/异步编程、网络编程以及编译和调试等知识点。

Welcome to follow WeChat official account【程序猿编码

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/87954.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AMEYA360:瑞萨电子整合Reality AI工具与e² studio IDE,扩大其在AIoT领域的卓越地位

全球半导体解决方案供应商瑞萨电21日宣布已在其Reality AI Tools?和e2 studio集成开发环境间建立接口&#xff0c;使设计人员能够在两个程序间无缝共享数据、项目及AI代码模块。实时数据处理模块已集成至瑞萨MCU软件开发工具套件&#xff08;注&#xff09;&#xff0c;以方便…

Failed to load property source from location ‘classpath:/application.yml‘

前言 给同学部署项目的时候出现了这个错误&#xff0c;困扰我半天&#xff0c;搞了一下午&#xff0c;最后Google找到了答案。 在这里记录一下&#xff01; 解决方案 第一步&#xff1a;删除原有yml文件&#xff0c;把内容复制下来&#xff0c;重新写一个然后再粘贴进去 …

【yolov5】detect.py

执行方法: 代码 # YOLOv5 &#x1f680; by Ultralytics, AGPL-3.0 license """ Run YOLOv5 detection inference on images, videos, directories, globs, YouTube, webcam, streams, etc.Usage - sources:$ python detect.py --weights yolov5s.pt --source …

深度学习在视频直播美颜sdk中的应用

视频直播美颜SDK是一类用于实时视频美颜处理的工具包&#xff0c;它们利用深度学习算法来提高视频直播中的主播和观众的外观吸引力。本文将深入探讨深度学习在视频直播美颜sdk中的应用&#xff0c;以及这些应用对直播行业的重要性。 一、人脸检测与关键点定位 通过卷积神经网…

Unity之Hololens如何实现3D物体交互

一.前言 什么是Hololens? Hololens是由微软开发的一款混合现实头戴式设备,它将虚拟内容与现实世界相结合,为用户提供了沉浸式的AR体验。Hololens通过内置的传感器和摄像头,能够感知用户的环境,并在用户的视野中显示虚拟对象。这使得用户可以与虚拟内容进行互动,将数字信…

2023-油猴(Tampermonkey)脚本推荐

2023-油猴&#xff08;Tampermonkey&#xff09;脚本推荐 知乎增强 链接 https://github.com/XIU2/UserScript https://greasyfork.org/zh-CN/scripts/419081 介绍 移除登录弹窗、屏蔽首页视频、默认收起回答、快捷收起回答/评论&#xff08;左键两侧&#xff09;、快捷回…

[PowerQuery] PowerAutoMate 刷新PowerBI 数据

通过PowerBI Automate 进行PowerBI 数据刷新之前,需要有Power Automate 授权或者Power Automate 试用账户,可以通过如下的地址进行申请注册。 https://flow.microsoft.com/zh-cn/ 完成Power Automate 登录之后,选中计划的云端流后创建,图为创建计划的云端流的操作步骤。 …

redis做缓存(cache)

什么是缓存 缓存(Cache)的核心思路就是把一些常用的数据放到访问速度更快的地方&#xff0c;方便获取。关于硬件的访问速度来说 CPU寄存器>内存>硬盘>网络 因此常见使用内存作为硬盘的缓存&#xff0c;例如redis。使用硬盘作为网络的缓存&#xff0c;例如浏览器通过h…

数据库原理与分析实验三

目录 1、实验目的 2、实验预习与准备 3、实验内容及步骤 本博客为数据库课布置的实验二的作业。 1、实验目的 &#xff08;1&#xff09; 掌握Select子句的功能和检索数据的方法 &#xff08;2&#xff09; 掌握对查询结果排序的方法 2、实验预习与准备 &#xf…

通信协议:Uart的Verilog实现(上)

1、前言 调制解调器是主机/设备与串行数据通路之间的接口&#xff0c;以串行单比特格式发送和接收数据。它也被称为通用异步收发器(Uart, Universal Asynchronous Receiver/Transmitter)&#xff0c;这表明该设备能够接收和发送数据&#xff0c;并且发送和接收单元不同步。 本节…

【re】BUUCTF Java逆向解密

题目&#xff1a;BUUCTF Java逆向解密 没壳&#xff0c;是java文件&#xff08;大概&#xff09; ida打开看不懂&#xff0c;找了网页上的java反编译 Decompiler.com 没用过java啊…暂且用sublime打开 还好还挺好懂的 import java.util.ArrayList; import java.util.Scanner;p…

Java开发需要的网络基础知识,搞清楚计算机网络底层原理

作者&#xff1a;逍遥Sean 简介&#xff1a;一个主修Java的Web网站\游戏服务器后端开发者 主页&#xff1a;https://blog.csdn.net/Ureliable 觉得博主文章不错的话&#xff0c;可以三连支持一下~ 如有需要我的支持&#xff0c;请私信或评论留言&#xff01; 前言 计算机基础是…

怎样提高外贸业务销售能力

怎样提高外贸业务销售能力 一、市场分析与研究1. 了解目标市场&#xff1a;2. 收集客户信息&#xff1a; 二、产品知识和差异化竞争1. 熟悉产品&#xff1a;2. 差异化竞争&#xff1a; 三、制定销售策略和计划1. 制定销售计划&#xff1a;2. 销售策略&#xff1a; 四、谈判技巧…

【插件】页面引导库driver.js:

文章目录 一、效果图:二、实现思路:三、实现代码:【1】Driver.js 的技术特性【2】安装依赖【3】代码实现【4】 配置相关参数 一、效果图: 二、实现思路: 【官网】https://driverjs.com/docs/installation 【npm】https://www.npmjs.com/package/driver.js 【案例】改造driver.j…

HAProxy Data Plane API 实现对 haproxy 的配置管理

文章目录 前言一、安装1. 下载HAProxy Data Plane API2. 创建 Data Plane API 配置文件 /etc/haproxy/dataplaneapi.hcl3. 修改haproxy的配置文件 二、简单使用1. 查询请求2. 提交修改请求 总结 前言 我们平时对 haproxy 配置的修改&#xff0c;往往是 SSH 连接进去节点&#…

C++之std::function类模板定义函数对象应用总结(二百三十八)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 人生格言&#xff1a; 人生…

【深入浅出设计模式--命令模式】

深入浅出设计模式--命令模式 一、背景二、问题三、解决方案四、试用场景总结五、后记 一、背景 命令模式是一种行为设计模式&#xff0c;它可以将用户的命令请求转化为一个包含有相关参数信息的对象&#xff0c;命令的发送者不需要知道接收者是如何处理这条命令&#xff0c;多个…

php文件上传功能(文件上传)

实现文件上传是Web开发中常用的功能之一&#xff0c;而PHP也是支持文件上传的。那么&#xff0c;下面我们就来介绍一下常用的PHP实现文件上传的方法。 使用HTML表单实现文件上传 HTML表单是Web开发中最基本的元素之一&#xff0c;它可以接收用户输入的数据&#xff0c;并通过…

大数据时代,数据治理

一、大数据时代还需要数据治理吗&#xff1f; 数据平台发展过程中随处可见的数据问题 大数据不是凭空而来&#xff0c;1981年第一个数据仓库诞生&#xff0c;到现在已经有了近40年的历史&#xff0c;相对数据仓库来说我还是个年轻人。而国内企业数据平台的建设大概从90年代末…

Docker 自动化部署(保姆级教程)

Docker 自动化部署 1. jenkins 介绍1.1 参考链接&#xff1a;1.2 jenkins 概述1.3 jenkins部署项目的流程 2. jenkins 安装2.1 基于docker 镜像2.2 启动 jenkins 后端服务2.3 登录 jenkins 服务后端 3. jenkins自动化部署开始3.1 下载需要的插件3.2 创建任务3.2.1 描述3.2.2 配…