int DNS_header_create(struct DNS_Header *header){ if(header==NULL){ printf("Header wrong!\n"); return -1; } memset(header, 0x00, sizeof(struct DNS_Header)); srandom(time(NULL)); header->id = random(); header->tag=htons(0x0100); header->queryNum=htons(0x0001); header->answerNum=htons(0x0000); header->authorNum=htons(0x0000); header->addNum=htons(0x0000); return 0; }
时间: 2024-04-06 22:28:33 浏览: 106
这段代码是一个函数,函数名为“DNS_header_create”,它接收一个指向“DNS_Header”结构体的指针“header”。该函数的作用是初始化“header”指向的结构体,设置一些DNS协议头的字段值,如id、tag、queryNum、answerNum、authorNum和addNum。如果传入的指针为NULL,则打印“Header wrong!”的错误信息,并返回-1,否则返回0。该函数使用了C语言中的“memset”函数和“srandom”函数。
相关问题
int DNS_build(struct DNS_Header *header,struct DNS_Query *query,char *request){ if(header==NULL||query==NULL||request==NULL){ printf("DNS build failed.\n"); return -1; } char *ptr=request; memset(request, 0x00, MESSAGE_LEN); int offset=0; memcpy(request+offset,header,sizeof (struct DNS_Header));offset+=sizeof (struct DNS_Header); memcpy(request+offset,query->name,query->length);offset+=query->length; memcpy(request+offset,&query->qtype,sizeof(unsigned short));offset+=sizeof(unsigned short); memcpy(request+offset,&query->qclass,sizeof(unsigned short));offset+=sizeof(unsigned short); return offset; }
这段代码是一个函数,函数名为“DNS_build”,它接收三个参数,一个指向“DNS_Header”结构体的指针“header”,一个指向“DNS_Query”结构体的指针“query”,一个指向字符数组的指针“request”。该函数的作用是根据传入的“header”和“query”指向的结构体,构建DNS协议的请求报文。如果传入的指针为NULL,则打印“DNS build failed.”的错误信息,并返回-1。该函数使用了C语言中的“memset”函数和“memcpy”函数,其中“memcpy”函数用于将“header”和“query”结构体中的字段拷贝到“request”数组中,构建DNS协议的请求报文。函数返回值为“offset”,表示构建的请求报文的长度。
int DNS_root_build(struct DNS_Header *header, struct DNS_Query *query, char *request) { if (header == NULL || query == NULL || request == NULL) { printf("DNS build failed.\n"); return -1; } char *ptr = request; memset(request, 0x00, MESSAGE_LEN); int offset = 2; memcpy(request + offset, header, sizeof(struct DNS_Header)); offset += sizeof(struct DNS_Header); memcpy(request + offset, query->name, query->length); offset += query->length; memcpy(request + offset, &query->qtype, sizeof(unsigned short)); offset += sizeof(unsigned short); memcpy(request + offset, &query->qclass, sizeof(unsigned short)); offset += sizeof(unsigned short); unsigned short data_len = htons((unsigned short)(offset - 2)); memcpy(request, &data_len, 2); return offset; }
这是一个 C 语言函数,用于构建 DNS 查询报文。它的参数包括指向 DNS 报文头部、查询结构体和请求字符串的指针。函数首先检查参数是否为 NULL,如果有任意一个参数为 NULL,则返回 -1。接下来,函数将请求字符串清零,然后将 DNS 头部复制到请求字符串中,并更新偏移量。接着,函数将查询名字复制到请求字符串中,并更新偏移量。然后,函数将查询类型和查询类复制到请求字符串中,并更新偏移量。最后,函数计算并设置 DNS 报文总长度,将长度信息复制到请求字符串开始处,并返回总长度。
阅读全文