我正在尝试使用resolv.h
BIND 中的库来理解 DNS 查询。我正在努力尝试从 . 返回的 RR 中解析 IP 地址 ns_parserr()
。我可以使用https://docstore.mik.ua/orelly/networking_2ndEd/dns/ch15_02.htm提供的代码成功解析权威 NS ,但我似乎无法获取A
类型记录并打印它们。主要是因为我不知道 IP 地址是如何在ns_rr
结构内部编码的。查看实现,RDATA 属于const u_char *
类型。如何从该记录中获取 IP?
int main (int argc, char * argv[])
{
union {
HEADER hdr;
u_char buf[NS_PACKETSZ];
} response;
int responseLen;
res_init();
ns_msg handle;
responseLen =res_query(argv[1],ns_c_in,ns_t_a,(u_char *)&response,sizeof(response));
if (responseLen<0)
exit(-1);
if (ns_initparse(response.buf, responseLen, &handle)<0)
{
fprintf(stderr, "ERROR PARSING RESPONSE....");
perror("damn");
exit(-1);
}
ns_rr rr;
int rrnum;
ns_sect section=ns_s_an;
for (rrnum=0;rrnum<(ns_msg_count(handle,section));rrnum++)
{
if (ns_parserr(&handle,ns_s_an,rrnum,&rr)<0)
{
fprintf(stderr, "ERROR PARSING RRs");
exit(-1);
}
if (ns_rr_type(rr)==ns_t_a)
{
[WHAT TO DO HERE?]
}
}
return 0;
}
我通常会尝试自己修复这些东西,但是resolv.h
互联网上关于图书馆的信息并不多,除了引用的来源。谢谢大家的支持,我很感激。