当前位置: 首页 > news >正文

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【程序猿编码

相关文章:

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

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

linux-定时任务

目录 一、crond命令 1、什么是计划任务 2、crond服务的概念 3、crontab 二、at命令 1、at任务的概念 三、邮件服务 1、概念 2、启动postfix 四、mailx命令 1、三个概念&#xff1a; 2、交互式发邮件 3、非交互式发邮件 四、cron定时任务实践 1、系统定时任务配置…...

在Spring Boot项目中使用Redisson

在Spring Boot项目中使用Redisson Redisson简介 Redisson官网仓库 Redisson中文文档 Redission是一个基于Java的分布式缓存和分布式任务调度框架&#xff0c;用于处理分布式系统中的缓存和任务队列。它是一个开源项目&#xff0c;旨在简化分布式系统的开发和管理。 以下是…...

JavaScript 函数柯里化

&#x1f3b6;什么是柯里化 柯里化&#xff08;Currying&#xff09;是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数&#xff0c;并且返回接受余下的参数且返回结果的新函数的技术。 &#x1f3a1;简单的函数柯里化的实现 // ------------- 原函数…...

springboot实现ACL+RBAC权限体系

本文基于web系统的权限控制非常重要的前提下&#xff0c;从ALC和RBAC权限控制两个方面&#xff0c;介绍如何在springboot项目中实现一个完整的权限体系。 源码下载 &#xff1a;https://gitee.com/skyblue0678/springboot-demo 序章 一个后台管理系统&#xff0c;基本都有一套…...

C++20协程示例

C20协程示例 认识协程 在C中&#xff0c;协程就是一个可以暂停和恢复的函数。 包含co_wait、co_yield、co_return关键字的都可以叫协程。 看一个例子&#xff1a; MyCoroGenerator<int> testFunc(int n) {std::cout << "Begin testFunc" << s…...

【Verilog 教程】6.2Verilog任务

关键词&#xff1a;任务 任务与函数的区别 和函数一样&#xff0c;任务&#xff08;task&#xff09;可以用来描述共同的代码段&#xff0c;并在模块内任意位置被调用&#xff0c;让代码更加的直观易读。函数一般用于组合逻辑的各种转换和计算&#xff0c;而任务更像一个过程&a…...

Spring修炼之路(1)基础入门

一、简介 1.1Spring概述 Spring框架是一个轻量级的Java开发框架&#xff0c;它提供了一系列底层容器和基础设施&#xff0c;并可以和大量常用的开源框架无缝集成&#xff0c;可以说是开发Java EE应用程序的必备。Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器&…...

GANs学习记录

GAN 基于GAN的研究识别相关不同背景目标图像 可以用Augmentation2021.3.15 基于GAN的研究 是通过GAN 进行图像重建&#xff0c;恢复细节&#xff0c;去模糊&#xff0c;提高图像质量&#xff0c;图像还原&#xff0c;去噪等等。 识别相关 一种基于生成对抗网络的训练样本扩充…...

Flink-CDC——MySQL、SqlSqlServer、Oracle、达梦等数据库开启日志方法

目录 1. 前言 2. 数据源安装与配置 2.1 MySQL 2.1.1 安装 2.1.2 CDC 配置 2.2 Postgresql 2.2.1 安装 2.2.2 CDC 配置 2.3 Oracle 2.3.1 安装 2.3.2 CDC 配置 2.4 SQLServer 2.4.1 安装 2.4.2 CDC 配置 2.5达梦 2.4.1安装 2.4.2CDC配置 3. 验证 3.1 Flink版…...

linux设置tomcat redis开机自启动

设置Tomcat自启动 1.修改 /etc/rc.d/rc.local 文件 [rootiowZ]# vim /etc/rc.d/rc.local在/etc/rc.d/rc.local文件最后加上&#xff1a; export JAVA_HOME/usr/local/jdk /usr/local/apache-tomcat-8.5.73/bin/startup.sh start退出vim并保存修改的文件。 说明&#xff1a;/u…...

跨域问题讨论

问题 跨域定义 当一个请求url的协议、域名、端口三者之间任意一个与当前页面地址不同即为跨域。 跨域的安全隐患&#xff08;CSRF攻击&#xff09; 也就是说&#xff0c;一旦允许跨域&#xff0c;意味着允许恶意网站随意攻击可信网站&#xff0c;带来安全风险。 这里面有一…...

ESP32设备通信-两个ESP32设备之间HTTP通信

两个ESP32设备之间HTTP通信 文章目录 两个ESP32设备之间HTTP通信1、应用介绍2、软件准备3、硬件准备4、代码实现4.1 ESP32服务器节点代码4.2 ESP32客户端节点代码在本文中,我们将介绍如何在没有任何物理路由器或互联网连接的情况下使用 Wi-Fi 在两个 ESP32 开发板之间执行无线…...

数据结构学习笔记——查找算法中的树形查找(平衡二叉树)

目录 一、平衡二叉树的定义二、平衡因子三、平衡二叉树的插入和构造&#xff08;一&#xff09;LL型旋转&#xff08;二&#xff09;LR型旋转&#xff08;三&#xff09;RR型旋转&#xff08;四&#xff09;RL型旋转 四、平衡二叉树的删除&#xff08;一&#xff09;叶子结点&a…...

P1830 轰炸III

题目背景 一个大小为 &#xfffd;&#xfffd;nm 的城市遭到了 &#xfffd;x 次轰炸&#xff0c;每次都炸了一个每条边都与边界平行的矩形。 题目描述 在轰炸后&#xff0c;有 &#xfffd;y 个关键点&#xff0c;指挥官想知道&#xff0c;它们有没有受到过轰炸&#xff0c;如…...

大语言模型LLM知多少?

你知道哪些流行的大语言模型?你都体验过哪写? GPT-4,Llamma2, T5, BERT 还是 BART? 1.GPT-4 1.1.GPT-4 模型介绍 GPT-4(Generative Pre-trained Transformer 4)是由OpenAI开发的一种大型语言模型。GPT-4是前作GPT系列模型的进一步改进,旨在提高语言理解和生成的能力,…...

Redis命令行使用Lua脚本

Redis命令行使用Lua脚本 Lua脚本在Redis中的使用非常有用&#xff0c;它允许你在Redis服务器上执行自定义脚本&#xff0c;可以用于复杂的数据处理、原子性操作和执行多个Redis命令。以下是Lua脚本在Redis中的基本使用详细讲解&#xff1a; 运行Lua脚本&#xff1a; 在Redis中…...

HTML详细基础(三)表单控件

本帖介绍web开发中非常核心的标签——表格标签。 在日常我们使用到的各种需要输入用户信息的场景——如下图&#xff0c;均是通过表格标签table创造出来的&#xff1a; 目录 一.表格标签 二.表格属性 三.合并单元格 四.无序列表 五.有序列表 六.自定义标签 七.表单域 …...

map和set的具体用法 【C++】

文章目录 关联式容器键值对setset的定义方式set的使用 multisetmapmap的定义方式insertfinderase[]运算符重载map的迭代器遍历 multimap 关联式容器 关联式容器里面存储的是<key, value>结构的键值对&#xff0c;在数据检索时比序列式容器效率更高。比如&#xff1a;set…...

聚合统一,SpringBoot实现全局响应和全局异常处理

目录 前言 全局响应 数据规范 状态码(错误码) 全局响应类 使用 优化 全局异常处理 为什么需要全局异常处理 业务异常类 全局捕获 使用 优化 总结 前言 在悦享校园1.0版本中的数据返回采用了以Map对象返回的方式&#xff0c;虽然较为便捷但也带来一些问题。一是在…...

web vue 项目 Docker化部署

Web 项目 Docker 化部署详细教程 目录 Web 项目 Docker 化部署概述Dockerfile 详解 构建阶段生产阶段 构建和运行 Docker 镜像 1. Web 项目 Docker 化部署概述 Docker 化部署的主要步骤分为以下几个阶段&#xff1a; 构建阶段&#xff08;Build Stage&#xff09;&#xff1a…...

MPNet:旋转机械轻量化故障诊断模型详解python代码复现

目录 一、问题背景与挑战 二、MPNet核心架构 2.1 多分支特征融合模块(MBFM) 2.2 残差注意力金字塔模块(RAPM) 2.2.1 空间金字塔注意力(SPA) 2.2.2 金字塔残差块(PRBlock) 2.3 分类器设计 三、关键技术突破 3.1 多尺度特征融合 3.2 轻量化设计策略 3.3 抗噪声…...

【Linux】C语言执行shell指令

在C语言中执行Shell指令 在C语言中&#xff0c;有几种方法可以执行Shell指令&#xff1a; 1. 使用system()函数 这是最简单的方法&#xff0c;包含在stdlib.h头文件中&#xff1a; #include <stdlib.h>int main() {system("ls -l"); // 执行ls -l命令retu…...

全球首个30米分辨率湿地数据集(2000—2022)

数据简介 今天我们分享的数据是全球30米分辨率湿地数据集&#xff0c;包含8种湿地亚类&#xff0c;该数据以0.5X0.5的瓦片存储&#xff0c;我们整理了所有属于中国的瓦片名称与其对应省份&#xff0c;方便大家研究使用。 该数据集作为全球首个30米分辨率、覆盖2000–2022年时间…...

vue3 定时器-定义全局方法 vue+ts

1.创建ts文件 路径&#xff1a;src/utils/timer.ts 完整代码&#xff1a; import { onUnmounted } from vuetype TimerCallback (...args: any[]) > voidexport function useGlobalTimer() {const timers: Map<number, NodeJS.Timeout> new Map()// 创建定时器con…...

浅谈不同二分算法的查找情况

二分算法原理比较简单&#xff0c;但是实际的算法模板却有很多&#xff0c;这一切都源于二分查找问题中的复杂情况和二分算法的边界处理&#xff0c;以下是博主对一些二分算法查找的情况分析。 需要说明的是&#xff0c;以下二分算法都是基于有序序列为升序有序的情况&#xf…...

初探Service服务发现机制

1.Service简介 Service是将运行在一组Pod上的应用程序发布为网络服务的抽象方法。 主要功能&#xff1a;服务发现和负载均衡。 Service类型的包括ClusterIP类型、NodePort类型、LoadBalancer类型、ExternalName类型 2.Endpoints简介 Endpoints是一种Kubernetes资源&#xf…...

Windows安装Miniconda

一、下载 https://www.anaconda.com/download/success 二、安装 三、配置镜像源 Anaconda/Miniconda pip 配置清华镜像源_anaconda配置清华源-CSDN博客 四、常用操作命令 Anaconda/Miniconda 基本操作命令_miniconda创建环境命令-CSDN博客...

【Android】Android 开发 ADB 常用指令

查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...

手机平板能效生态设计指令EU 2023/1670标准解读

手机平板能效生态设计指令EU 2023/1670标准解读 以下是针对欧盟《手机和平板电脑生态设计法规》(EU) 2023/1670 的核心解读&#xff0c;综合法规核心要求、最新修正及企业合规要点&#xff1a; 一、法规背景与目标 生效与强制时间 发布于2023年8月31日&#xff08;OJ公报&…...