2017-01-03 6 views
1

IPv6 DNSサーバーのリストをプログラムで取得しようとしています。現在、私はlibresolvと、次のコードを使用しています:IPv6 DNSサーバーリストをプログラムでLinuxで取得する

#include <stdio.h> 
#include <netinet/in.h> 
#include <resolv.h> 
#include <stdlib.h> 
#include <string.h> 

int main(int argc, char** argv) 
{ 
    res_state res = malloc(sizeof(struct __res_state)); 
    res_ninit(res); 

    printf("%p\n", res->_u._ext.nsaddrs[0]); // (nil) here 
} 

resolv.hによると、RES - > _ u._ext.nsaddrsフィールドが必要なアドレスを「構造体SOCKADDR_IN6 *」の配列を含有しなければならないが、それが含まれていますNULLの配列。

IPv4 DNSサーバリストは、res-> nsaddr_listフィールドからアクセスできますが、IPv6リストは常に空です。私はUbuntuとCentOSの両方でこれをチェックしました。 IPv6が正しく設定されています。

答えて

0

コードが正しいようです。ほとんどの場合、res_ninit()は、ご使用のシステムが認識していないため、IPv6 DNSサーバーをstruct res_stateに入れません。

てみてください、あなたの/etc/resolv.confに次の行を配置する:

ネームサーバ2001:4860:8844 ::私は事実を無視して、このアプローチを試してみた

+0

4860そのresolv.confは手作業で編集してはならず、役に立たない。サーバーはプロバイダーのDHCPからDNSサーバーの一覧を取得し、システムによって正しく使用されます。 – Vsevolod

+0

このリストはどこに保存されていると思いますか?答えは 'resolv.conf'です。 –

関連する問題