4000-520-616
欢迎来到免疫在线!(蚂蚁淘生物旗下平台)  请登录 |  免费注册 |  询价篮
主营:原厂直采,平行进口,授权代理(蚂蚁淘为您服务)
咨询热线电话
4000-520-616
当前位置: 首页 > 新闻动态 >
热卖商品
新闻详情
resolv.h 用法-CSDN论坛
来自 : CSDN技术社区 发布时间:2021-03-25
resolv.h怎么用啊?是不是查域名的mx、a记录的?哪位哥哥能写个c的例子
我的需求是根据域名查出mx记录,然后查其a记录
我用c写的,调用DIG命令,也可以查到,但同事说这样不好
有同事写的是C++的,小弟不会C++,真是罪过
C++代码如下:

#ifndefDNS_QUERY_H
#define DNS_QUERY_H
#include netinet/in.h
#include arpa/nameser.h
#include resolv.h
#include\"log.h\"
#include string
#include vector
usingnamespacestd;
classdns_query_t
{
public:
staticintmx_query(constchar*domain,vector string mx_list,vector string default_mx);
};
unsignedshortgetshort(unsignedchar*c){return(c[0] 8)+c[1];}
intdns_query_t::mx_query(constchar*domain,vector string mx_list,vector string default_mx)
{
logtrace((COMMON,\"dns_query_t::mx_querybeginwithdomain: %s ...\",domain));
//makeacleanstart
if(default_mx!=mx_list)
{
mx_list.clear();
mx_list.assign(default_mx.begin(),default_mx.end());
}

//initializeresolver
if(res_init()){
logerror((COMMON,\"dns_query_t::mx_query= res_init()failed\"));
return-1;
}
//doMXquery
union{
HEADERhdr;
u_charbuf[NS_PACKETSZ];
}response;
intresponse_len=res_query(domain,C_IN,T_MX,(u_char*) response,sizeof(response));
if(response_len 0){
logerror((COMMON,\"dns_query_t::mx_query= res_query()failed\"));
return-1;
}
if((size_t)response_len sizeof(response)){
response_len=sizeof(response);
}
u_char*response_end=response.buf+response_len;
u_char*response_pos=response.buf+sizeof(HEADER);
//skipqueries
intresponse_count=ntohs(response.hdr.qdcount);
while(response_count-- 0){
charquery_name[MAXDNAME];
intbytes_read=dn_expand(response.buf,response_end,response_pos,query_name,MAXDNAME);
if(bytes_read 0){
logerror((COMMON,\"dns_query_t::mx_query= dn_expand()failed:parseQUERYpartinMXlookup1.\"));
return-1;
}
response_pos+=bytes_read;
if((response_end-response_pos) QFIXEDSZ){
logerror((COMMON,\"dns_query_t::mx_query= dn_expand()failed:parseQUERYpartinMXlookup2.\"));
return-1;
}
response_pos+=QFIXEDSZ;
}
//nowprocessanswers
response_count=ntohs(response.hdr.ancount);
while(response_count-- 0){
charmx_name[MAXDNAME];
intbytes_processed=dn_expand(response.buf,response_end,response_pos,mx_name,MAXDNAME);
if(bytes_processed 0){
logerror((COMMON,\"dns_query_t::mx_query= dn_expand()failed:parseQUERYpartinMXlookup3.\"));
return-1;
}
response_pos+=bytes_processed;
if((response_end-response_pos) 10){
logerror((COMMON,\"dns_query_t::mx_query= dn_expand()failed:parseQUERYpartinMXlookup4.\"));
return-1;
}
unsignedshortrrtype=getshort(response_pos);
unsignedshortrrdlen=getshort(response_pos+8);
response_pos+=10;
if(rrtype==T_MX){
//!unsignedshortpriority=(response_pos[0] 8)+response_pos[1];
memset(mx_name,0,MAXDNAME);
if(dn_expand(response.buf,response_end,response_pos+2,mx_name,MAXDNAME) 0){
logerror((COMMON,\"dns_query_t::mx_query= dn_expand()failed:parseQUERYpartinMXlookup5.\"));
return-1;
}
//!VERBOSE(\"MTA::get_mx_list():entry[\" mx_name \"]priority[\" priority \"]\");
mx_list.push_back(std::string(mx_name));
}
response_pos+=rrdlen;
}

logtrace((COMMON,\"dns_query_t::mx_querydomain: %s endok.\",domain));
returnmx_list.empty();
}
#endif /*DNS_QUERY_H*/

本文链接: http://resolvan.immuno-online.com/view-771099.html

发布于 : 2021-03-25 阅读(0)
公司介绍
品牌分类
联络我们
服务热线:4000-520-616
(限工作日9:00-18:00)
QQ :1570468124
手机:18915418616
官网:http://