Node.js 为什么dns.resolveMx会因“而失败?”;gmail.com“;
我正在尝试调试这个包,更具体地说,我想了解使用Node.js 为什么dns.resolveMx会因“而失败?”;gmail.com“;,node.js,ubuntu,windows-subsystem-for-linux,wsl-2,Node.js,Ubuntu,Windows Subsystem For Linux,Wsl 2,我正在尝试调试这个包,更具体地说,我想了解使用gmail.com主机域时遇到的错误。这个错误只发生在运行在WSL2下的Ubuntu20.04上 让我困惑的是,resolveMx在Windows(gmail)上运行良好,在wsl Ubuntu和Windows(protonmail等其他领域)上也能正常运行 运行nslookup或dig也适用于wsl上的gmail域,因此看起来确实是nodejs下面使用的系统调用行为不一致 在这两个操作系统中,我使用的是相同的nodejs版本:14.15.4 我正在
gmail.com
主机域时遇到的错误。这个错误只发生在运行在WSL2下的Ubuntu20.04上
让我困惑的是,resolveMx
在Windows(gmail)上运行良好,在wsl Ubuntu和Windows(protonmail等其他领域)上也能正常运行
运行nslookup
或dig
也适用于wsl上的gmail域,因此看起来确实是nodejs下面使用的系统调用行为不一致
在这两个操作系统中,我使用的是相同的nodejs版本:14.15.4
我正在使用的代码段:
const dns = require('dns');
const util = require('util');
dns.resolveMx('gmail.com', (err, addresses) => {
if (err){
console.log(err); // going here, see error message below
return;
}
console.log(util.inspect(addresses));
});
给出以下错误,仅适用于WSL2上托管的Ubuntu:
Error: queryMx ETIMEOUT gmail.com
at QueryReqWrap.onresolve [as oncomplete] (dns.js:203:19) {
errno: undefined,
code: 'ETIMEOUT',
syscall: 'queryMx',
hostname: 'gmail.com'
}
在Windows上,我得到了预期的结果:
[
{ exchange: 'alt1.gmail-smtp-in.l.google.com', priority: 10 },
{ exchange: 'gmail-smtp-in.l.google.com', priority: 5 },
{ exchange: 'alt4.gmail-smtp-in.l.google.com', priority: 40 },
{ exchange: 'alt3.gmail-smtp-in.l.google.com', priority: 30 },
{ exchange: 'alt2.gmail-smtp-in.l.google.com', priority: 20 }
]
更让我困惑的是,如果我为另一个提供商(比如protonmail)更改gmail,mx分辨率在wsl发行版和Windows上都能正常工作
更新
这个问题发生的不一致,因为我在wsl上的某个时候也使用了
resolveMx
。它在wsl中总是失败还是不一致?你能strace
it来查看它是否在重复寻找像/etc/resolv.conf这样的名称服务器文件吗?我想不出你失败的原因,但是我安装了NodeJS 14.15.4(使用n)并在WSL2和Ubuntu 20.04下运行了你的代码片段,没有任何问题。我收到的结果与您在Windows节点下收到的结果相同,只是顺序不同。我在想,我们需要看一看特定于你们环境的东西吗?@ZacAnger这确实是不一致的。我没有注意到它,因为到目前为止它总是失败,但在和斯特拉斯玩过之后,我让它工作了一次。这让我更加困惑……我不熟悉strace命令,我应该在输出中寻找一些特别的东西吗?您提到了/etc/resolv.conf
。在输出中,我确实有以下条目:openat(AT_FDCWD,“/etc/resolv.conf”,O_RDONLY)=17 fstat(17,{st_mode=S_IFREG | 0644,st_size=198,…})=0 read(17,“#此文件自动被ge”…,4096)=198 read(17,“,4096)=0 close(17)=0