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

这篇具有很好参考价值的文章主要介绍了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);
    }
  
...
}

运行结果:
Linux C/C++下收集指定域名的子域名信息(类似dnsmap实现),C/C++,linux,c语言,c++,网络安全,dnsmap
Linux C/C++下收集指定域名的子域名信息(类似dnsmap实现),C/C++,linux,c语言,c++,网络安全,dnsmap
Linux C/C++下收集指定域名的子域名信息(类似dnsmap实现),C/C++,linux,c语言,c++,网络安全,dnsmap

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【程序猿编码文章来源地址https://www.toymoban.com/news/detail-730226.html

到了这里,关于Linux C/C++下收集指定域名的子域名信息(类似dnsmap实现)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 网络安全信息收集初探之域名信息收集

    扫描单个域名 批量扫描域名 oneforall 额外参数 ![在这里插入图片描述](https://img-blog.csdnimg.cn/615763f979ea453091ad715f69980555.png https://crt.sh/ https://search.censys.io/

    2024年02月13日
    浏览(56)
  • 域名及真实IP-信息收集

    a)国际域名: 常用的是:.com、.net、.org 推荐大家用.com; 示范:taobao.com、dangdang.com b)国家域名: 中国国家域名:.cn 美国国家域名:.us 考虑政策原因,cn域名请个人网站谨慎使用; 企业网站可以正常使用,示范:net.cn(中国万网) a)二级域名: 示范:www.baidu.com、zhanzhang.

    2024年02月21日
    浏览(35)
  • 最新绕过目标域名CDN进行信息收集技术

    CDN(Content Delivery Network,内容分发网络)的目的是通过在现有的网络架构中增加一层新的Cache(缓存)层,将网站的内容发布到最接近用户的网络“边缘”的节点,使用户可以就近取得所需的内容,提高用户访问网站的响应速度,从技术上全面解决由于网络带宽小、用户访问

    2024年02月11日
    浏览(51)
  • 网络安全-子域名收集

    本文为作者学习文章,按作者习惯写成,如有错误或需要追加内容请留言(不喜勿喷) 本文为追加文章,后期慢慢追加 子域名 子域名指二级域名,二级域名是顶级域名(一级域名)的下一级比如mail.heetian.com和bbs.heetian.com是heetian.com的子域,而heetian.com则是顶级域名.com的子域 子域

    2024年02月09日
    浏览(34)
  • 史上最全的子域名收集姿势

    信息泄露 Github 、Gitee等代码仓库中,可能有相关子域名的信息 抓包分析获取,如一些静态资源的请求、一些APP或者小程序接口、邮件服务器等等 很多网站有跨域策略文件 crossdomain.xml 、站点地图 sitemap.xml 和 robots.txt 等,其中也可能存在子域名的信息。 搜索引擎网络资产搜索

    2024年02月07日
    浏览(39)
  • 一款强大的子域名收集工具(OneForAll)

    大家都知道在渗透测试的信息收集过程中,子域名收集非常重要,我自己平时也都是直接用在线收集工具来扫的,或使用谷歌或进行子域名爆破来收集,效率都不是很高。 刚好前几天看到了米斯特安全团队发布的开源项目OneForAll,作用是用来收集和爆破子域名的,尝试安装使

    2024年02月02日
    浏览(41)
  • 一款功能强大的子域收集工具OneForAll

    借助官方的宣传简介阐述一下: 在渗透测试中信息收集的重要性不言而喻,子域收集是信息收集中必不可少且非常重要的一环,目前网上也开源了许多子域收集的工具,但是总是存在以下部分问题: 不够强大,子域收集的接口不够多,不能做到对批量子域自动收集,没有自

    2024年02月16日
    浏览(55)
  • nohup 输出到指定文件 Linux nohup 实现命令后台运行并输出或记录到指定日志文件 设置日志结果文件名称 重定向到某个文件 标准误 标准错误输出定向 输入报错信息保留

    # yourcommand:启动对象命令。可以跟该命令需要的各种参数。 # 是指在后台运行,但当用户推出(挂起)的时候,命令自动也跟着退出. nohup与结合起来,可以实现不挂断的后台运行。 实现屏幕输出记录到日志文件 # 0 – stdin (standard input),1 – stdout (standard output),2 – stderr (standa

    2024年02月05日
    浏览(63)
  • Linux :: 内容过滤指令【3】:grep 指令【详解】:在指定文件中过滤搜索信息、(模糊)查找包含指定字符串的内容!(如:系统故障时,查看操作日志信息等情景)

    前言:本篇是 Linux 基本操作篇章的内容! 笔者使用的环境是基于腾讯云服务器:CentOS 7.6 64bit。 学习集: C++ 入门到入土!!!学习合集 Linux 从命令到网络再到内核!学习合集 注:find 指令常与 grep 指令在面试中被提及,需让你回答异同! 目录索引: 1. 基本语法、功能及使

    2024年02月09日
    浏览(61)
  • 并查集维护额外信息,算法思路类似前缀和,结构类似扑克接龙

    240. 食物链 动物王国中有三类动物 A,B,CA,B,C, 这三类动物的食物链构成了有趣的环形 。 AA 吃 BB,BB 吃 CC,CC 吃 AA。 现有 NN 个动物,以 1∼N 1∼N 编号 。 每个动物都是 A,B,CA,B,C 中的一种,但是我们并不知道它到底是哪一种。 有人用两种说法对这 NN 个动物所构成的

    2024年02月14日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包