NET6_LWIP使用DNS服务

ping测试,使用dns时出现:
msh />ping www.baidu.com
ping: unknown host www.baidu.com
----------------------------
经过排查发现:
先把宏定义添加上去
#ifndef LWIP_DNS
#define LWIP_DNS 1
#endif

在系统初始化调用
dns_init();
1、创建一个udp的专用于dns的dns_pcb控制块
2、dns_setserver指定dns的服务器地址写进dns_servers数组

在while(1)之前或者在你认为需要调用的地方调用dns_gethostbyname(const char *hostname, ip_addr_t *addr, dns_found_callback found, void *found)

其中,hostname为你需要解析的域名,addr为解析返回的IP地址指针,found回调函数。
=>dns_enqueue将需要dns的域名填充存放在dns_table
这个table的大小就是同时可以dns的域名数量的多少了!
=>dns_check_entry检查dns_table的状态机
=>根据状态机调用dns_send向dns_servers发送数据

=>dns_tmr有个dns定时器不断的dns请求
=>dns_check_entries=>dns_check_entry

最后在dns_recv里收到域名对应的IP

4.特别注意:配置正确的DNS服务器地址。(尽量通过DHCP获取DNS服务器地址,不要手动填写)

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

一般程序会将8.8.8.8设置为dns的服务器地址,这是Google提供的免费DNS服务器的IP地址

参考链接:https://blog.csdn.net/H542723151/article/details/84318141

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章