RFC1035域名随机生成测试代码

来源:互联网 发布:淘宝卖家跑哪去了 编辑:程序博客网 时间:2024/06/05 10:07
#include <stdio.h>#include <stdlib.h>#include <string.h>#include <unistd.h>#include <stdint.h>#include <time.h>char *char_map[] = {"a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y","z"};char *tld_map[] = {"net", "org", "com", "cn", "gov", "edu", "net"};#define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0]))#define MAX_L2DOMAIN_SIZE 16#define MAX_L3DOMAIN_SIZE 8#define MIN_L2DOMAIN_SIZE 3#define MIN_L3DOMAIN_SIZE 3#define NAME_FMT_RFC1035 0int make_qname(char *buf){//// 初始化三级域名各级长度//size_t l2_size = random() % MAX_L2DOMAIN_SIZE;size_t l3_size = random() % MAX_L3DOMAIN_SIZE;size_t tld_idx = random()  % ARRAY_SIZE(tld_map);size_t char_idx = 0;int i = 0;char *name = NULL;char *ptr = buf;size_t len = 0;l3_size = l3_size ? l3_size : MIN_L3DOMAIN_SIZE;#if NAME_FMT_RFC1035*buf = l3_size;buf ++;#else*buf = '.';#endiffor(i = 0; i < l3_size; i ++){char_idx = random() % ARRAY_SIZE(char_map);*buf = char_map[char_idx][0];buf ++;}l2_size = l2_size ? l2_size : MIN_L2DOMAIN_SIZE;#if NAME_FMT_RFC1035*buf = l2_size;#else*buf = '.';#endifbuf ++;for(i = 0; i < l2_size; i ++){char_idx = random() % ARRAY_SIZE(char_map);*buf = char_map[char_idx][0];buf ++;}name = tld_map[tld_idx];len = strlen(name);#if NAME_FMT_RFC1035*buf = len;#else*buf = '.';#endifbuf ++;memcpy(buf, name, len);buf += len;*buf = 0;buf ++;return buf - ptr;}int main(int arg, char **argv){char qname[1024] = {0};size_t len = 0;int i = 0;srandom(time(NULL));len = make_qname(qname);printf("name=(%s) len=%u\n", qname, len);    return 0;}

原创粉丝点击