W5500EVB解析域名对应的IP


关键词:DNS  W5500  WIZnet  W5500EVB  域名服务器


DNS是域名服务器的简称,用于域名解析。DNS的出现就是为了用户在访问网页时,不用再输入网站的IP地址,而是用一串便于记忆的字母就可以访问。通过W5500来实现DNS域名解析也是非常方便的。本节将解析www.baidu.com对应的IP 地址。 客户端初始化完毕之后,如果DNS 运行标志位是1或者DNS 发送次数超过3次就直接返回。如果不是上面的情况,并且DNS Server的IP不是0.0.0.0时,进入switch函数。当处于DNS 域名解析成功状态时,DNS_OK置1,发送请求报文次数置0,并且把得到的域名对应的IP地址copy到ConfigMsg.rip, 然后我们把解析到的www.baidu.com的IP地址通过串口打印出来。当处于DNS解析域名失败时,标志位置0,请求报文次数加1,然后跳出循环。如果以上情况都不是,打印出无效的DNS Server 地址。以上是简单介绍了通过W5500解析百度IP地址的过程。过程其实是很简单的,就是通过不断读取寄存器 状态来判断W5500的状态,最终成功解析到IP地址。

DNS解析的过程的原理示意图如下:

主循环代码如下:
	while(1)
	{ 	
		if(USART_RX_STA & 0x8000)							      									 // 串口数据发送
		{				   
			len=USART_RX_STA&0x3fff;
			memcpy(buffer,USART_RX_BUF,len);
			USART_RX_STA=0;
			memset(USART_RX_BUF,0,len+1);
			printf("\r\n[ %s ]'s IP Address is:\r\n",buffer);
			dns_flag=1;																				// DNS标志位置1
		}
		if(dns_flag==1)
		{			
			if(dns_num>=6)								  											// DNS次数≥6
			{
				dns_flag=0;								 											// DNS标志位清0
				dns_num=0;																			// dns_num清0
				printf("\r\nInput the domain name(eg>>www.baidu.com):");
			}
			else
				do_dns(buffer);						  												// DNS过程
		}
	}
	
DNS的测试步骤如下
  1. DNS例程采用默认的IP信息,所以在w5500_conf.c文件中设置ip_from为IP_FROM_DEFINE。
  2. 对代码进行编译,之后将程序烧录到野火开发板。
  3. 连接好网线,USB串口线。打开串口调试工具,复位野火开发板,从输出结果可以得到图1设置信息。按照此方法,把程序中“www.baidu.com”域名换成其它的域名,同样可以解析成功。

图1:DNS解析信息

例程下载:【DNS】
编译环境:keil V5.11
硬件要求:W5500EVB