程序员必知:【转】adns解析库——域名解析实例(C++、linux)

简介: 程序员必知:【转】adns解析库——域名解析实例(C++、linux)

转自:

adns是一个开源的dns解析库

官方文档:

1. 初始化

?adns_state adns;adns_query query;adns_answer answer; 函数原型:int adns_init(adns_state newstate_r, adns_initflags flags, FILE diagfile /0=>stderr/); 举例:adns_init(adns, adns_if_noenv, 0);

2. 提交待解析的域名

?函数原型:int adns_submit(adns_state ads, const char owner, adns_rrtype type, adns_queryflags flags, void context, adns_query query_r); 举例:adns_submit(adns, argv【1】, adns_r_a, (adns_queryflags) 0, NULL, query);

3. 检测是否有域名已检测完成

?函数原型:int adns_check(adns_state ads, adns_query query_io, adns_answer answer_r, void context_r); 例:adns_check(adns, query, answer, NULL);

4.

?函数原型:int adns_wait(adns_state ads, adns_query query_io, adns_answer answer_r, void context_r); 例:adns_wait(adns, query, answer, NULL);

5. 检测是否已完成所有提交的域名的解析

?函数原型:void adns_finish(adns_state ads); 例:adns_finish(adns);

6. 范例代码(解析IPv4地址可使用adns v1.2或adns v1.4,解析IPv6地址请使用adns v1.6)

可从此处下载:

?#include "adns.h" #include #include #include #include int test_dns(char host) { adns_state ads; adns_initflags flags; flags = adns_if_nosigpipe | adns_if_noerrprint; adns_init(ads, flags, NULL); adns_query quer = NULL; adns_submit(ads, host, (adns_rrtype) adns_r_a, (adns_queryflags) 0, NULL, quer); int tryCount = -1; int adns_cname = 0; while(tryCount < 32) { tryCount += 1; adns_answer ans; int res = adns_check(ads, quer, ans, NULL); if(res == 0) { if (ans->status == adns_s_prohibitedcname) { char cname【128】; strncpy(cname, ans->cname, 127); cname【strlen(ans->cname)】 = '\0'; adns_query quer = NULL; adns_submit(ads, cname, (adns_rrtype) adns_r_addr, (adns_queryflags) 0, NULL, quer); adns_cname = 1; } else { //resolve IPv4 address /          if(adns_cname) printf("ip: %s\n", ans->status == adns_s_ok ? inet_ntoa(ans->rrs.addr->addr.inet.sin_addr) : "no"); else printf("ip: %s\n", ans->status == adns_s_ok ? inet_ntoa((ans->rrs.inaddr)) : "no"); / //resolve IPv6 address if(adns_cname){ if(ans->status == adns_s_ok){ char buf【INET6_ADDRSTRLEN】; inet_ntop(AF_INET6, ans->rrs.addr->addr.inet6.sin6_addr, buf, sizeof(buf)); printf("ip: %s\n", buf); } else{ printf("no\n"); } } else{ if(ans->status == adns_s_ok){ char buf【INET6_ADDRSTRLEN】; inet_ntop(AF_INET6, ans->rrs.in6addr, buf, sizeof(buf)); printf("ip: %s\n", buf); } else{ printf("no\n"); } }//代码效果参考:http://www.ezhiqi.com/bx/art_7661.html adns_finish(ads); break; } } else if (res == ESRCH || res == EAGAIN) { sleep(1); } else { printf("host(%s) is err!\n", host); } } return 0; } int main(int argc, char argv【】) { char host【128】; while(1) { scanf("%s", host); if(strlen(host) == 3 strcmp(host, "eof")) break; test_dns(host); }//代码效果参考:http://www.ezhiqi.com/zx/art_1206.html return 0; }

Makefile

?CFLAGS= -g TARGETS=libadns.a LIBOBJS=types.o event.o query.o reply.o general.o setup.o transmit.om parse.o poll.o check.o all: testdns testdns: testdns.c libadns.a libadns.a: $(LIBOBJS) rm -f $@ $(AR) cq $@ $(LIBOBJS) clean: rm -f $(LIBOBJS) libadns.a *~ config.status distclean: clean rm -f config.h .depend $(LIBOBJS): adns.h internal.h config.h

相关文章
|
6月前
|
API C++ Windows
Visual C++运行库、.NET Framework和DirectX运行库的作用及常见问题解决方案,涵盖MSVCP140.dll丢失、0xc000007b错误等典型故障的修复方法
本文介绍Visual C++运行库、.NET Framework和DirectX运行库的作用及常见问题解决方案,涵盖MSVCP140.dll丢失、0xc000007b错误等典型故障的修复方法,提供官方下载链接与系统修复工具使用指南。
1438 2
|
6月前
|
Ubuntu API C++
C++标准库、Windows API及Ubuntu API的综合应用
总之,C++标准库、Windows API和Ubuntu API的综合应用是一项挑战性较大的任务,需要开发者具备跨平台编程的深入知识和丰富经验。通过合理的架构设计和有效的工具选择,可以在不同的操作系统平台上高效地开发和部署应用程序。
256 11
|
6月前
|
IDE 编译器 开发工具
msvcp100.dll,msvcp120.dll,msvcp140.dll,Microsoft Visual C++ 2015 Redistributable,Visual C++ 运行库安装
MSVC是Windows下C/C++开发核心工具,集成编译器、链接器与调试器,配合Visual Studio使用。其运行时库(如msvcp140.dll)为程序提供基础函数支持,常因缺失导致软件无法运行。通过安装对应版本的Microsoft Visual C++ Redistributable可解决此类问题,广泛应用于桌面软件、游戏及系统级开发。
770 2
|
6月前
|
缓存 算法 程序员
C++STL底层原理:探秘标准模板库的内部机制
🌟蒋星熠Jaxonic带你深入STL底层:从容器内存管理到红黑树、哈希表,剖析迭代器、算法与分配器核心机制,揭秘C++标准库的高效设计哲学与性能优化实践。
C++STL底层原理:探秘标准模板库的内部机制
|
7月前
|
并行计算 C++ Windows
|
域名解析 存储 缓存
深入学习 DNS 域名解析
在平时工作中相信大家都离不开 DNS 解析,因为 DNS 解析是互联网访问的第一步,无论是使用笔记本浏览器访问网络还是打开手机APP的时候,访问网络资源的第一步必然要经过DNS解析流程。
1231 31
|
存储 机器学习/深度学习 人工智能
阿里云服务器第八代通用型g8i实例评测:性能与适用场景解析
阿里云服务器通用型g8i实例怎么样?g8i实例采用CIPU+飞天技术架构,并搭载最新的Intel 第五代至强可扩展处理器(代号EMR),不仅性能得到大幅提升,同时还拥有AMX加持的AI能力增强,以及全球范围内率先支持的TDX机密虚拟机能力。这些特性使得g8i实例在AI增强和全面安全防护两大方面表现出色,尤其适用于在线音视频及AI相关应用。本文将深入探讨g8i实例的产品特性、优势、适用场景及规格族,以帮助您更好地了解这款产品,以供参考和选择。
|
存储 缓存 负载均衡
阿里云服务器实例选择指南:热门实例性能、适用场景解析对比参考
2025年,在阿里云的活动中,主售的云服务器实例规格除了轻量应用服务器之外,还有经济型e、通用算力型u1、计算型c8i、通用型g8i、计算型c7、计算型c8y、通用型g7、通用型g8y、内存型r7、内存型r8y等,以满足不同用户的需求。然而,面对众多实例规格,用户往往感到困惑,不知道如何选择。本文旨在全面解析阿里云服务器实例的各种类型,包括经济型、通用算力型、计算型、通用型和内存型等,以供参考和选择。
|
算法 测试技术 C语言
深入理解HTTP/2:nghttp2库源码解析及客户端实现示例
通过解析nghttp2库的源码和实现一个简单的HTTP/2客户端示例,本文详细介绍了HTTP/2的关键特性和nghttp2的核心实现。了解这些内容可以帮助开发者更好地理解HTTP/2协议,提高Web应用的性能和用户体验。对于实际开发中的应用,可以根据需要进一步优化和扩展代码,以满足具体需求。
1222 29

热门文章

最新文章