现在的位置: 首页 > 综合 > 正文

RFC1035域名随机生成测试代码

2013年08月03日 ⁄ 综合 ⁄ 共 1384字 ⁄ 字号 评论关闭
#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;
}

【上篇】
【下篇】

抱歉!评论已关闭.