以下のコードは、ゾーンファイルにあるTXTリソースレコードを印刷することを想定しています。
BLOCK 1(BLOCK 2は存在しない)でのみコードを実行すると、3つのTXT RRのそれぞれの名前、タイプ、クラス、TTL、およびデータ長が取得されます。
しかし、BLOCK 2のみを使用してコードを実行すると、最初のTXT RRの回答のみが表示され、次にエラーメッセージが表示されます。ns_parserr:メッセージが長くなります。
誰かがこの問題で私を助けてくれますか?
前もって感謝します。
int rrnum; /* resource record number */
ns_rr rr; /* expanded resource record */
for(rrnum = 0; rrnum < ns_msg_count(handle, ns_s_an); rrnum++)
{
//from section ns_s_an(ANSWER) take out answer number rrnum and put it in rr
if (ns_parserr(&handle, ns_s_an, rrnum, &rr)) {
fprintf(stderr, "ns_parserr: %s\n", strerror(errno));
}
if (ns_rr_type(rr)==ns_t_txt){
//BLOCK 1
char *cp;
cp=(char *)ns_rr_name(rr);
printf("CP->%s\n",(char *)cp);
int i1=ns_rr_type(rr);
printf("Type->%d\n", i1);
int i2=ns_rr_class(rr);
printf("Class->%d\n", i2);
int i3=ns_rr_ttl(rr);
printf("TTL->%d\n", i3);
int i4=ns_rr_rdlen(rr);
printf("Data Length->%d\n\n", i4);
//BLOCK 2
u_char const *rdata=ns_rr_rdata(rr);
printf("Data->%s\n",(u_char *)rdata);
char *rdatatemp;
rdatatemp=(char *)rdata;
int len=strlen(rdata);
printf("%d\n",len);
rdatatemp[strlen(rdata)-2]='\0';
printf("Data->%s\n",(u_char *)rdatatemp);
}
}
これは、次の2つのブロックで得られる結果です: vanco @
vanco-laptop:〜/ Desktop $ gcc d2ip.c /usr/lib/libresolv.a vanco
@vanco-laptop:〜/ Desktop $ ./a.out www .example.comCP-
>www.example.com
タイプ->16
クラス->1TTL-
>10800
データ長->41
データ->(ver = dgw1 pre = 8 id =0name=www.example.com� <br/>
43
データ->(ver = dgw1 pre = 8 id = 0 name = www.example.com
ns_parserr:メッセージが長すぎます