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

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