int DNS_query_create(struct DNS_Query *query,const char *hostname,const char *type){ if(query==NULL||hostname==NULL){ printf("query or hostname wrong.\n"); return -1; } memset(query, 0x00, sizeof(struct DNS_Query)); query->name=malloc(sizeof(hostname)+2); query->length=strlen(hostname)+2; char *ptr=query->name; int offset = 0; const char s[2]="."; char *hostname_dup= strdup(hostname); char *token=strtok(hostname_dup,s); while(token!=NULL){ size_t len=strlen(token); *(ptr+offset)=len; offset++; strncpy(ptr+offset,token,len+1); offset+=len; token=strtok(NULL,s); } free(hostname_dup); if(strcmp(type,"A")==0){ query->qtype= htons(TYPE_A); }else if(strcmp(type,"CNAME")==0){ query->qtype=htons(TYPE_CNAME); }else if(strcmp(type,"MX")==0){ query->qtype=htons(TYPE_MX); }else if(strcmp(type,"PTR")==0){ query->qtype=htons(TYPE_PTR); }else{ printf("No such type!!!\n"); exit(-1); } query->qclass= htons(0x0001); return offset; }
时间: 2024-04-06 22:28:26 浏览: 75
C_gethost_cprogramming_GetHost_WORKING_
这段代码是一个函数,函数名为“DNS_query_create”,它接收三个参数,一个指向“DNS_Query”结构体的指针“query”,一个指向字符串的指针“hostname”,一个指向字符串的指针“type”。该函数的作用是根据传入的主机名和查询类型,初始化“query”指向的结构体,设置一些DNS协议查询的字段值,如name、length、qtype和qclass。如果传入的指针为NULL,则打印“query or hostname wrong.”的错误信息,并返回-1。该函数使用了C语言中的“memset”函数、“malloc”函数、“strdup”函数、“strtok”函数、“strlen”函数和“strcmp”函数。
阅读全文