RFC1035域名随机生成测试代码

本文介绍了一个用C语言编写的程序,该程序能够随机生成符合RFC1035标准的三级域名查询名称。通过定义字符集和顶级域名列表,并使用随机数生成指定长度的二级和三级域名部分,程序实现了域名格式的多样化。此代码适用于理解和实践DNS命名系统的工作原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#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;
}

RFC介绍域系统和协议细节,并假设读者熟悉在姊妹篇RFC域名 - 概念和设施”[RFC-1034]中讨论的概念。 目录 第1章 本备忘录状态 第2章 序言 2-1 综述 2-2 一般配置 2-3 惯例 2-3-1 首选的名称句法 2-3-2 数据传送顺序 2-3-3 字符大小写 2-3-4 大小限制 第3章 域名空间和资源记录(RR)定义 3-1 名称空间定义 3-2 资源记录定义 3-2-1 格式 3-2-2 TYPE值 3-2-3 QTYPE值 3-2-4 CLASS值 3-2-5 QCLASS值 3-3 标准RRs 3-3-1 CNAME RDATA格式 3-3-2 HINFO RDATA格式 3-3-3 MB RDATA格式(试验) 3-3-4 MD RDATA格式(废止) 3-3-5 MF RDATA格式(废止) 3-3-6 MG RDATA格式(试验) 3-3-7 MINFO RDATA格式 (试验) 3-3-8 MR RDATA格式(试验) 3-3-9 MX RDATA格式 3-3-10 NULL RDATA格式(试验) 3-3-11 NS RDATA格式 3-3-12 PTR RDATA格式 3-3-13 SOA RDATA格式 3-3-14 TXT RDATA格式 3-4 ARPA互联网特定RRs 3-4-1 A RDATA格式 3-4-2 WKS RDATA格式 3-5 IN-ADDR.ARPA域 3-6 定义新的类型、类和专用名称空间 第4章 消息 4-1 格式 4-1-1 首部部分格式 4-1-2 问题部分格式 4-1-3 资源记录格式 4-1-4 消息压缩 4-2 传送 4-2-1 UDP应用 4-2-2 TCP应用 第5章 主文件 5-1 格式 5-2 定义区域的主文件的应用 5-3 主文件举例 第6章 名称服务器实现 6-1 架构 6-1-1 控制 6-1-2 数据库 6-1-3 时间 6-2 标准查询处理 6-3 区域更新和重新加载处理 6-4 反向查询(可选) 6-4-1 反向查询和响应的内容 6-4-2 反向查询和响应举例 6-4-3 反向查询处理 6-5 完整查询和响应 第7章 解析器实现 7-1 将用户请求转换为查询 7-2 发送查询 7-3 处理响应 7-4 使用缓存器 第8章 邮件支持 8-1 邮件交换绑定 8-2 邮箱绑定(试验) 第9章 参考文献和参考书目 原文索引
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值