#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 0
int 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 = '.';
#endif
for(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 = '.';
#endif
buf ++;
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 = '.';
#endif
buf ++;
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;
}
RFC1035域名随机生成测试代码
最新推荐文章于 2024-10-29 10:55:27 发布