历史上的今天
返回首页

历史上的今天

今天是:2025年07月22日(星期二)

正在发生

2019年07月22日 | 基于STM32+W5500 的DNS移植

2019-07-22 来源:eefocus

什么是DNS?

DNS: Domain Name System,域名系统。简单理解,我们平时在浏览器上输入的都是域名,如www.baidu.com,这种域名便于人们的记忆和沟通。你可以很轻松的记住10个域名,但要你记住10个纯数字的ip地址,那就比较费劲了,但电脑通讯的时候是通过ip来通讯的。那么DNS就可以解决这个问题,把域名转化为IP地址。具体DNS的详细内容可参考该文章:http://blog.51cto.com/369369/812889


W5500的DNS移植过程

紧接上一篇文章,DNS的移植就比较简单。首先,还是添加驱动文件。 

 这里写图片描述

查询dns.h 头文件,有如下定义,DNS服务器的端口号是53,通讯的协议是UDP协议,默认的域名长度是16。


#define  MAX_DOMAIN_NAME   16       // for example "www.google.com"

#define IPPORT_DOMAIN     53       ///< DNS server port number


DNS的配置主要调用了DNS_init和DNS_run函数,下面编写DNS的Test函数,向DNS输入域名,查看DNS是否返回这个域名的IP地址。具体代码如下:


#define SOCKET_DNS         2//定义一个SOCKET口,W5500有8个,0-7都行

wiz_NetInfo gWIZNETINFO = { .mac = {0x78, 0x83, 0x68, 0x88, 0x56, 0x38},

                            .ip =  {192, 168, 4,17},

                            .sn =  {255,255,255,0},

                            .gw =  {192, 168,4,1},

                            .dns = {180,76,76,76},

                            .dhcp = NETINFO_DHCP};

uint8_t DNS_2nd[4]={168,126,63,1};//定义一个备用的DNS

uint8_t Domain_name[]="www.baidu.com";//域名

uint8_t Domain_IP[4]={0,};//存放DNS返回的域名对应的IP地址


void DNS_Test(void)

{

    int8_t ret;

    //打印出两个DNS

    printf("rn=== DNS Client Example ===============rn");

    printf("> DNS 1st : %d.%d.%d.%drn", gWIZNETINFO.dns[0], gWIZNETINFO.dns[1], gWIZNETINFO.dns[2], gWIZNETINFO.dns[3]);

    printf("> DNS 2nd : %d.%d.%d.%drn", DNS_2nd[0], DNS_2nd[1], DNS_2nd[2], DNS_2nd[3]);

    printf("======================================rn");

    printf("> Example Domain Name : %srn", Domain_name);


    /* DNS client initialization */

    DNS_init(SOCKET_DNS, gDATABUF);//初始化

    /* DNS procssing */

    if ((ret = DNS_run(gWIZNETINFO.dns, Domain_name, Domain_IP)) > 0) // try to 1st DNS,向gWIZNETINFO.dns这个DNS服务器查询Domain_name这个域名的IP地址,返回的IP地址存放到Domain_IP中

    {

        printf("> 1st DNS Reponsedrn");

    }

    else if ((ret != -1) && ((ret = DNS_run(DNS_2nd, Domain_name, Domain_IP))>0))     // retry to 2nd DNS

    {

        printf("> 2nd DNS Reponsedrn");

    }

    else if(ret == -1)

    {

        printf("> MAX_DOMAIN_NAME is too small. Should be redefined it.rn");

    }

    else

    {

        printf("> DNS Failedrn");

    }

    if(ret > 0)

    {

     printf("> Translated %s to %d.%d.%d.%drn",Domain_name,Domain_IP[0],Domain_IP[1],Domain_IP[2],Domain_IP[3]);

    }

}


DNS返回值有三个:-1、0和1,如下:


/*

 * @brief DNS process

 * @details Send DNS query and receive DNS response

 * @param dns_ip        : DNS server ip

 * @param name          : Domain name to be queryed

 * @param ip_from_dns   : IP address from DNS server

 * @return  -1 : failed. @ref MAX_DOMIN_NAME is too small n //返回-1,输入的域名太长,定义的域名最大值太小

 *           0 : failed  (Timeout or Parse error)n//返回-1,超时了

 *           1 : success//成功

 * @note This funtion blocks until success or fail. max time = @ref MAX_DNS_RETRY * @ref DNS_WAIT_TIME

 */

int8_t DNS_run(uint8_t * dns_ip, uint8_t * name, uint8_t * ip_from_dns);


调用DNS_Test()函数,进行DNS测试,向2个DNS查询www.baidu.com的IP地址。


void W5500_ChipInit(void)

{

    W5500_RESET();

    RegisterFunction();

    ChipParametersConfiguration();

    NetworkParameterConfiguration();

    DHCP_SET();

    DNS_Test();//DNS测试

}


下载程序执行,串口的输出如下图: 

 这里写图片描述 

可以看到向DNS查询域名www.baidu.com的ip时,第一个DNS响应了,得到域名对应的IP是:61.135.169.125。在浏览器中输入该地址,成功打开了百度,DNS解析成功。


推荐阅读

史海拾趣

芯朋微电子(chipown)公司的发展小趣事

随着技术的不断进步和市场需求的增长,芯朋微电子逐步将产品线拓展至标准电源和工业驱动领域。2013年,公司推出工控功率芯片产品,这些芯片广泛应用于电机、基站、智能电表等行业领域,进一步扩大了公司的市场份额。

HBControls公司的发展小趣事
检查冰箱内部的风扇是否正常运行,风扇的作用是帮助冷气循环,如果风扇不工作,会影响制冷效果。
ETERNA公司的发展小趣事

2014年,ETERNA成为了ATP世界网球巡回赛瑞士公开赛的指定合作伙伴。这一合作标志着ETERNA在品牌建设和市场推广方面取得了新的突破。通过与ATP的合作,ETERNA不仅成功地将品牌与高端体育赛事相结合,还进一步提升了品牌形象和知名度。同时,ETERNA还为赛事提供了精准的计时服务,展现了其在电子技术领域的实力。

ALLEN BRADLEY公司的发展小趣事

2014年,ETERNA成为了ATP世界网球巡回赛瑞士公开赛的指定合作伙伴。这一合作标志着ETERNA在品牌建设和市场推广方面取得了新的突破。通过与ATP的合作,ETERNA不仅成功地将品牌与高端体育赛事相结合,还进一步提升了品牌形象和知名度。同时,ETERNA还为赛事提供了精准的计时服务,展现了其在电子技术领域的实力。

Elytone Electronics Co Ltd公司的发展小趣事

进入XXXX年代,随着电子技术的飞速发展,Elytone公司意识到技术创新是企业持续发展的关键。公司投入大量资金引进先进设备和研发人才,成功开发出一系列具有竞争力的电子产品。这些产品在市场上获得了良好的口碑,为公司的快速发展奠定了坚实基础。

DECON公司的发展小趣事

DECON公司成立于电子行业的蓬勃发展时期,初创期便专注于研发和生产高质量的电子连接器产品。通过对市场的深入调研和技术创新,公司成功定位自己在高端连接器市场的位置,并凭借其出色的产品质量和稳定的性能,逐步在市场中树立了良好的口碑。

问答坊 | AI 解惑

工程师凭什么创业?

工程师是中国最有智慧的力量,他们创造了中国一个又一个新的产品和新的服务。你看看你的手机,你看看你家里的电器,你看看你身边的所有时髦和不时髦的人,他们都在验证一个现象,中国工业发展迅猛,中国的工程师智慧惊人。一个做了20年研发工程师的 ...…

查看全部问答>

uclinux内核的打印信息怎样去掉?大侠帮忙~~~

uclinux内核的打印信息怎样去掉? 应该是打印信息重新定向,内核应该有配置的地方,可惜我没找到 不知哪位达人能帮忙指点下 再具体介绍下问题的由来:当驱动报错时,会在板子外接的lcd屏上显示报错信息, 这些信息应该是内核打印信息,我就是想 ...…

查看全部问答>

wince 上传文件到服务器

从网上看了一些  wince都不支持。 …

查看全部问答>

急!!!!!!!!!各位大侠请帮忙,GPRS 发送数据问题

我用wavecom 的gprs功能如可发送数据,指令是什么.我现在AT+CGATT这些指令都是成功的,就是不知道GPRS网络连通以后如何去发送数据.用什么指令去发,比如我要登录wwww.163.com我该用at指令如何操作,或者有相关的文档也可以提供一点,万分感激.…

查看全部问答>

求触摸屏驱动

最近要做触摸屏驱动,以前又没接触过,哪位大侠有触摸屏驱动方面的程序或源码给发一个,小弟万分感谢!!!! email:diahou1136@sina.com QQ:35937862 万分感谢万分感谢万分感谢万分感谢!!!!…

查看全部问答>

大家都来说上几句啊,,谢谢

大家在s3c2410,2413,2440的时候,memorey control 中 bank 是什么意思啊?然后 bank 和 外围芯片的片选(cs)有什么联系吗?刚刚入行,请各位老鸟们给予真诚的解答…

查看全部问答>

详解热转印制板法的技术

热转印制板所需要的硬件:1:一台用于产生高精度塑料碳粉阻焊层的打印输出设备,比如一台激光打印机或者一台复印机(复印机的话需要有复印原稿,原稿可以用喷墨打印机打印出来)。2:一个能用的电熨斗。3:一张不干胶贴纸的光滑底衬纸。3:一定量的 ...…

查看全部问答>

两STM32通过SPI通信,主机接收中断,大家帮忙

主机发送,从机能中断接收。就是从机发送,主机中断接收,主机能进入中断,但是没接收到数据!!!大家帮帮忙!! 硬件连接: 主机                        & ...…

查看全部问答>

【TI首届低功耗设计大赛】MSP430FR5969程序体验

刚拿到MSP430FR5969的时候匆匆忙忙的就编写了简单的程序,错过了板子自带的程序。 这几天重新刷回开箱程序。 这个代码包含:GPIO控制(LED,按键),ADC,中断,低功耗模式,UART通信,板载超级电容电压检测,FRAM特性展示等等应有尽有。 按照官 ...…

查看全部问答>

#以拆会友#ThinkPad笔记本硬盘拆解

本帖最后由 DavidZH 于 2015-8-9 20:05 编辑 绝对原装ThinkPad笔记本硬盘,使用的是西部数据,WD2500BEVS, 拆开看看! 内部谍照第一张, 那油光油光的可以当镜子了! 内部电路图:从拆出来的电路来看,主芯片只有三课,也很常见 特写主电路图 ...…

查看全部问答>