LWIP 实现DNS域名解析(一)

域名解析

在项目应用中,运用到了域名解析的功能,第一次接触,在这里记录下来:
1.先把LWIP_DNS宏定义开启

在lwipopts.h中使能DNS功能,如下所示:

#define LWIP_DNS                        1

2.在系统初始化时调用

dns_init();
sys_timeouts_init();
以上初始化在lwip协议栈1.4.1版本中lwip_init();函数中已初始化完成,只需调用lwip_init();即可;

3.在你认为需要调用的地方调用
dns_gethostbyname(const char *hostname, ip_addr_t *addr, dns_found_callback found, void *found);
其中,hostname为你需要解析的域名,addr为解析返回的IP地址指针,found回调函数。

4.特别注意:配置正确的DNS服务器地址。
(尽量通过DHCP获取DNS服务器地址,不要手动填写,参考:https://blog.csdn.net/chen244798611/article/details/78576806)

/** DNS server IP address */
#ifndef DNS_SERVER_ADDRESS
#define DNS_SERVER_ADDRESS(ipaddr)        (ip4_addr_set_u32(ipaddr, ipaddr_addr("192.168.11.1"))) /* resolver1.opendns.com */    //208.67.222.222
#endif

5.如果没有使用操作系统,需要自己添加定时处理函数

#if LWIP_DNS
static void lwipDNSTickTaskCreate()
{
    TASK    Task;
    Task.wType = TASK_WHILELOOP;
    Task.period.tCounter = 0;
    Task.period.tTimer = DNS_TMR_INTERVAL;
    Task.pRun = LwipDNSTickRun;
    Task.pParam = 0;
    Create_Task(&Task, 0);
}
static void LwipDNSTickRun(void *pParam)
{
    dns_tmr();    //1s进入一次
}
#endif

以上为lwip域名解析操作流程,下面贴上应用代码(利用485发送域名信息,解析成功后返回):

void dns_found(const char *name, ip_addr_t *host_ip, void *callback_arg)
{
    ;
}

static  void    RunRS485(void *vpParam)
{
	WORD	wLen = 0;
	struct ip_addr  dnsaddr;
	char Testname[] = "ongoing...";

	wLen = Device_Read(g_hRS485, (BYTE_T *)g_sRs485Recvbuf, 0, 0);

    if(wLen > 0)
    {
        if(strstr((char *)g_sRs485Recvbuf, "www")  !=  NULL)
        {
            if(dns_gethostbyname((char *)g_sRs485Recvbuf, &(dnsaddr), dns_found, NULL) == ERR_OK)
            {
                char *ptr = ip_ntoa(&dnsaddr);

                Device_Write(g_hRS485,   (BYTE_T *)ptr,  sizeof(char)*14, 0); //打印地址信息
            }
            else
            {
                Device_Write(g_hRS485,   (BYTE_T *)Testname, strlen(Testname), 0);
            }
        }
    }

	Device_Control(g_hRS485, RS485_CMD_RX, NULL);
	Device_Control(g_hRS485, RS485_CMD_TX, NULL);
}

测试结果:

发布了27 篇原创文章 · 获赞 67 · 访问量 6万+

猜你喜欢

转载自blog.csdn.net/zhaozhiyuan111/article/details/89950591