标签: libresolv

gcc/cygwin如何获得DNS服务器?

我有一些代码我在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服务器有什么技巧吗?

c dns networking cygwin libresolv

8
推荐指数
1
解决办法
5740
查看次数

如何查询服务器并获取MX,A,NS记录

我正在尝试获取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)

c unix sockets dns libresolv

4
推荐指数
1
解决办法
4333
查看次数

标签 统计

c ×2

dns ×2

libresolv ×2

cygwin ×1

networking ×1

sockets ×1

unix ×1