首页 > 解决方案 > 如何通过指定特定的 DNS 来解析(获取)esp8266 的公共域名的 IP

问题描述

我想知道像 stackoverflow.com 这样的公共域名的 IP,例如使用我的 esp8266。我知道有一种方法WiFi.hostByName("www.stackoverflow.com",IP); ,但这不允许我指定特定的指定 DNS,如 8.8.8.8 而且我不想通过指定主 DNS 和辅助 DNS 来连接我的 esp8266,而是会自动从路由器获取这些信息. 我希望这个程序能够解决我的 esp8266 的问题。所以我需要从指定的 DNS 服务器获取 IP。

我见过这个有趣的,但它使用了我不应该处理的 EthernetUDP。

我尝试了以下方法:

#include <Dns.h>
#include <ESP8266WiFi.h>
void setup() {
  WiFi.begin("SSID", "password");
  DNSClient dnClient;
  IPAddress IPtofind;
  const IPAddress DNS_IP( 8, 8, 8, 8 );
  dnClient.begin( DNS_IP );

  if(dnClient.getHostByName("stackoverflow.com", IPtofind) == 1) {
    Serial.println(IPtofind);
  }
  else Serial.print(F("dns lookup failed"));
}

但编译器抱怨

static void EthernetClass::begin(uint8_t*, IPAddress, IPAddress, IPAddress, IPAddress)

它有权这样做。你有什么简单的解决办法吗?我觉得真的应该很简单!

标签: dnsesp8266arduino-ide

解决方案


Arduino 的 esp8266 内核不像 Arduino 的 WiFi 库那样具有 setDNS,即使它应该具有相同的 API。

设置不配置静态IP的DNS服务器来改变DHCP获取的DNS,可以使用espconn_dns_setserver底层SDK的功能。


推荐阅读