简体   繁体   English

c查询txt记录

[英]c query txt record

Every body, I have write program to read the dns txt record, but it has some issue, who can tell my why? 每个人,我都有编写程序来读取dns txt记录,但是它有一些问题,谁能告诉我为什么? Following is my source code 以下是我的源代码

char blockItem[512];
bzero(blockItem,512);
/*Temp Save the txt record value*/
int responseLength;
/*The Length of response*/
int i;
/*For Loop Controller*/
ns_msg query_parse_msg;
/*List of response message
 * For txt record , It sould only one response!
 * */
ns_rr query_parse_rr;
/*One response message*/
u_char responseByte[512];
/*Variable that for storage query answer.*/
bzero(responseByte,512);
/*Clear variable*/
if ((responseLength = res_query(host,C_IN,T_TXT,responseByte,512)) < 0)
{
    /*Query DNS Server*/
    return HOSTNOTFIND;
}
else
{
    if (ns_initparse(responseByte,responseLength,&query_parse_msg) < 0)
    {
        /*Pass the answer to ns_msg(May be it mean cut the dns header)*/
        printf("%s\n","Cannot Read response Message");
        return NOTSUCCESSFUL;
    }
    else
    {
        for (i =0;i < ns_msg_count(query_parse_msg,ns_s_an);i++)
        {
        /*Count the toolly response*/
            if (ns_parserr(&query_parse_msg,ns_s_an,i,&query_parse_rr))
            {
            /*Pass the msg list to rr.*/
                printf("%s\n","Parse failed!");
                return NOTSUCCESSFUL;
            }
            else
            {
                u_char const *rdata = (u_char*)(ns_rr_rdata(query_parse_rr) );
                char *blockItem;
                blockItem=(char*)rdata;
                blockItem[strlen((char*)rdata)-2] = '\0';
                /*Pass the ns_rr to char data type.*/
                printf("Normal:%s\n",(u_char *)blockItem);
            }
        }
    }

OutPut: Fv=spf1 redirect=_spf.google.com 输出: Fv=spf1 redirect=_spf.google.com

But original txt record should be v=spf1 redirect=_spf.google.com 但原始txt记录应为v=spf1 redirect=_spf.google.com

My issue is u_char const *rdata = (u_char*)(ns_rr_rdata(query_parse_rr) ) 我的问题是u_char const *rdata = (u_char*)(ns_rr_rdata(query_parse_rr) )

If i change it to u_char const *rdata = (u_char*)(ns_rr_rdata(query_parse_rr) +1) 如果我将其更改为u_char const *rdata = (u_char*)(ns_rr_rdata(query_parse_rr) +1)

Output will change to: v=spf1 redirect=_spf.google.com 输出将更改为: v=spf1 redirect=_spf.google.com

Also , I has refer how to query MX record, i found that has +2, Anything can tell me why?? 另外,我已经参考了如何查询MX记录,发现有+2,什么都可以告诉我为什么?

TXT record RDATA format is TXT记录的RDATA格式是

length, 1 byte
string, <length bytes>
length2, 1 byte
string2, <length2 bytes>
etc.

MX record RDATA format is MX记录的RDATA格式为

priority, 2 bytes
domain name, the rest of the message

( RFC 1035 , paragraphs 3.3.14 and 3.3.9) RFC 1035第3.3.14和3.3.9段)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM