我有一些代码我在cygwin(使用GCC)下编写成功使用gethostbyname(); 但是当我尝试直接使用解析器来检索DNS服务器的IP地址时,它失败了(nsaddr_list []中的所有条目都为null,nscount为-1).如果gethostbyname()正在工作,那么显然它能够连接到DNS服务器.
这段代码......
if (res_init() == -1) {
fprintf(stderr,"res_init() failed\n");
exit(1);
}
if (_res.nscount <= 0) {
fprintf(stderr,"nscount = %d\n",_res.nscount);
}
else {
for(i=0;i<_res.nscount;i++) {
fprintf(stderr, "dnssrvr: %d.%d.%d.%d\n",
(_res.nsaddr_list[i].sin_addr.s_addr & 0xff) >> 0,
(_res.nsaddr_list[i].sin_addr.s_addr & 0xff00) >> 8,
(_res.nsaddr_list[i].sin_addr.s_addr & 0xff0000) >> 16,
(_res.nsaddr_list[i].sin_addr.s_addr & 0xff000000) >> 24);
}
}
Run Code Online (Sandbox Code Playgroud)
适用于unix/linux,但在cygwin上返回nscount = -1.使用cygwin/gcc时获取DNS服务器有什么技巧吗?
我正在尝试获取A,MX和NS A服务器记录,如下所示:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <netinet/in.h>
#include <resolv.h>
#include <netdb.h>
#define N 4096
int main (int argc, char *argv[])
{
u_char nsbuf[N];
char dispbuf[N];
ns_msg msg;
ns_rr rr;
int i, l;
if (argc < 2) {
printf ("Usage: %s <domain>\n", argv[0]);
exit (1);
}
// HEADER
printf("Domain : %s\n", argv[1]);
// ------
// A RECORD
printf("A records : \n");
l = res_query(argv[1], ns_c_any, ns_t_a, nsbuf, sizeof(nsbuf));
if (l < 0)
{
perror(argv[1]);
}
ns_initparse(nsbuf, l, &msg); …Run Code Online (Sandbox Code Playgroud)