dns - 如何通过指定特定的 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)
它有权这样做。你有什么简单的解决办法吗?我觉得真的应该很简单!
解决方案
Arduino 的 esp8266 内核不像 Arduino 的 WiFi 库那样具有 setDNS,即使它应该具有相同的 API。
设置不配置静态IP的DNS服务器来改变DHCP获取的DNS,可以使用espconn_dns_setserver
底层SDK的功能。
推荐阅读
- python - MySQL SQLALCHEMY Python 获取时间戳的最大计数
- sql - SQL - BigQuery - 如何从日历表中填写日期?
- typescript - TypeScript - 使用 toml 解析后对象上不存在属性
- node.js - Steam 上的节点发布请求
- npm - 错误:找不到插件“proposal-private-methods”。确保 ./available-plugins.js 中有一个条目
- reactjs - componentDidMount 总是在反应渲染之前调用
- linux - 从 1 行获取带有 awk 的字符串/短语
- visual-studio - Hololens 2 模拟器无法识别输入
- javascript - 将函数 VARIABLE 传递给事件侦听器与传递函数 REFERENCE 有什么区别?
- python - 如何在循环中从 BeautifulSoup 中的 span 标签获取文本