c-ares DNS域名异步解析成IP
来源:互联网 发布:bigapp源码 编辑:程序博客网 时间:2024/06/15 20:44
//build1: g++ dns_parse_cares.cc /usr/local/lib/libcares.a -lrt -o test //build2: g++ dns_parse_cares.cc -lcares -lrt -o test#include <time.h>#include <iostream>#include <netdb.h>#include <arpa/inet.h>#include <ares.h>#include <sys/select.h>#include <string.h>#define IP_LEN 32typedef struct {char host[64];char ip[5][IP_LEN]; int count; }IpList;void dns_callback (void* arg, int status, int timeouts, struct hostent* hptr) //ares 处理完成,返回DNS解析的信息{ IpList *ips = (IpList*)arg;if( ips == NULL ) return; if(status == ARES_SUCCESS){strncpy(ips->host, hptr->h_name, sizeof(ips->host)); char **pptr=hptr->h_addr_list;for(int i=0; *pptr!=NULL && i<5; pptr++,++i){ inet_ntop(hptr->h_addrtype, *pptr, ips->ip[ips->count++], IP_LEN); } }else{ std::cout << "lookup failed: " << status << std::endl; }}void dns_resolve(const char* host, IpList &ips){ ares_channel channel; // 创建一个ares_channel int res; if((res = ares_init(&channel)) != ARES_SUCCESS) { // ares 对channel 进行初始化 std::cout << "ares feiled: " << res << std::endl; return; }//set dns server ares_set_servers_csv(channel, "114.114.114.114"); //get host by name ares_gethostbyname(channel, host, AF_INET, dns_callback, (void*)(&ips)); int nfds; fd_set readers, writers; timeval tv, *tvp; while (true) { FD_ZERO(&readers); FD_ZERO(&writers); nfds = ares_fds(channel, &readers, &writers); //获取ares channel使用的FD if (nfds == 0) break; tvp = ares_timeout(channel, NULL, &tv); select(nfds, &readers, &writers, NULL, tvp); //将ares的SOCKET FD 加入事件循环 ares_process(channel, &readers, &writers); // 有事件发生 交由ares 处理 } ares_destroy(channel);}int main(int argc, char **argv){ int res; if(argc < 2 ) { std::cout << "usage: " << argv[0] << " ip.address"<< std::endl; return 1; }IpList ips;do{memset(&ips, 0, sizeof(ips)); dns_resolve(argv[1],ips);std::cout <<"hostname:"<< ips.host << std::endl; for(int i=0; i < ips.count; ++i){std::cout<< "address ip:" << ips.ip[i] << std::endl;}std::cout<< std::endl;}while(true); return 0;}
阅读全文
2 0
- c-ares DNS域名异步解析成IP
- c-ares 一个C语言的异步DNS解析库
- [gevent源码分析] c-ares异步DNS请求
- 网络DNS域名转换成IP地址
- 域名?主机?IP?DNS?
- java JNDI 自己指定DNS服务器解析域名IP
- DNS BIND 搭建域名智能解析DNS服务器之IP地址归类(ACL)
- IP|子网|子网掩码| 域名|DNS
- TCP/IP-DNS域名系统
- 通过本地DNS域名服务器寻找域名对应IP地址C/C++
- 异步方式解析域名
- 域名专题 - DNS解析原理
- 域名DNS轮循解析
- DNS域名系统解析过程
- Dns解析为ip
- ubuntu11.04 能够ping通外ip,但是解析不了域名—ubuntu的DNS配置
- Tiny DNS Resolver异步DNS解析
- TCP/IP读书笔记之DNS域名系统
- MATLAB 最优化方法 总结
- Python库urllib2详解
- js里面格式化日期
- html_base学习笔记
- CSDN日报20170523 ——《技术合伙人,千万别做!》
- c-ares DNS域名异步解析成IP
- 创建maven web项目(推荐)
- 168. Excel Sheet Column Title
- SSH(Spring+Struts+Hibernate)框架学习之分页技术的实现
- 雅虎终于死了:从市值 1000 亿到贱卖 48 亿,到最后连名字都没保住
- 【LeetCode】39. Combination Sum
- POJ 3617 Best Cow Line(贪心)
- 4.php socket
- hadoop zookeeper hive hbase kylin等的部署