DNS-域名解析,简单来讲就是主机IP地址和域名的对应,数字表示的IP地址不好记忆,用字母标识的域名就很友好了,使我们很方面的访问到某个站点。比如我们要访问零知实验室官网,我们可以直接访问IP:120.24.241.163 ,也可以直接访问: www.lingzhilab.com ,但是后者更方便;下面我们在零知ESP8266开发板上进行DNS服务的实验。
硬件我们本次使用零知-ESP8266;
软件使用零知开发工具,自带示例:
(1)先在零知开发工具中打开DNSServer示例,或者复制下面的代码到零知开发工具中:
/**********************************************************
* 文件: x.ino by 零知实验室([url]www.lingzhilab.com[/url])
* -^^- 零知开源,让电子制作变得更简单! -^^-
* 时间: 2019/05/28 12:22
* 说明:
************************************************************/
#include <ESP8266WiFi.h>
#include <DNSServer.h>
#include <ESP8266WebServer.h>
const byte DNS_PORT = 53;
IPAddress apIP(192, 168, 1, 1);
DNSServer dnsServer;
ESP8266WebServer webServer(80);
void setup() {
WiFi.mode(WIFI_AP);
WiFi.softAPConfig(apIP, apIP, IPAddress(255, 255, 255, 0));
WiFi.softAP("DNSServer example");
// modify TTL associated with the domain name (in seconds)
// default is 60 seconds
dnsServer.setTTL(300);
// set which return code will be used for all other domains (e.g. sending
// ServerFailure instead of NonExistentDomain will reduce number of queries
// sent by clients)
// default is DNSReplyCode::NonExistentDomain
dnsServer.setErrorReplyCode(DNSReplyCode::ServerFailure);
// start DNS server for a specific domain name
dnsServer.start(DNS_PORT, "www.example.com", apIP);
// simple HTTP server to see that DNS server is working
webServer.onNotFound([]() {
String message = "welcome to lz laboratory!\n\n";
message += "URI: ";
message += webServer.uri();
webServer.send(200, "text/plain", message);
});
webServer.begin();
}
void loop() {
dnsServer.processNextRequest();
webServer.handleClient();
}
(2)验证后上传代码到零知-ESP8266开发板。
(3)然后我们在电脑上无线网络就可以看到如下热点:
(4)我们现在连接到这个热点,然后在浏览器里打开我们设置的域名:www.example.com, 可以看到如下结果:
这个页面和我们访问 192.168.1.1 这个IP是一样的: