如何在节点js中将主机名解析为IP地址
How to resolve hostname to an ip address in node js
我需要将 hosts 文件中定义的主机名解析为其对应的 IP 地址。
例如我的主机文件看起来像这样 - “/etc/hosts”
127.0.0.1 ggns2dss81 localhost.localdomain localhost
::1 localhost6.localdomain6 localhost6
192.168.253.8 abcdserver
192.168.253.20 testwsserver
现在在我的 node.js
中,我可以读取该文件的内容,但我需要获取给定的 hostname
。
hostname = "testwsserver"
hostIP = getIP(hostname);
console.log(hostIP); // This should print 192.168.253.20
PS - npm pkg
或任何第三方包无法安装在机器上。
非常感谢帮助!!
怎么样NodeJS documentation - DNS – 你检查了吗?
const dns = require('dns')
dns.lookup('testwsserver', function(err, result) {
console.log(result)
})
仅以 Krzysztof Safjanowski 的回答为基础,
您还可以使用内置 promisify 实用程序将其转换为承诺而不是回调。
const util = require('util');
const dns = require('dns');
const lookup = util.promisify(dns.lookup);
try {
result = await lookup('google.com')
console.log(result)
} catch (error) {
console.error(error)
}
这是一个使用标准 modules, promises, and async/await 的示例:
import { default as dns } from 'dns';
async function getIP(hostname)
{
let obj = await dns.promises.lookup(hostname).catch((error)=>
{
console.error(error);
});
return obj?.address;
}
async function main()
{
let hostname = "whosebug.com";
let hostIP = await getIP(hostname);
console.log(`IP Address of ${hostname}:`, hostIP);
}
main();
您将其保存到以扩展名 mjs
而不是 js
结尾的文件中,这样节点就会知道我们正在使用 ES6 模块的 import
语句而不是commonJS require
语句。
我需要将 hosts 文件中定义的主机名解析为其对应的 IP 地址。
例如我的主机文件看起来像这样 - “/etc/hosts”
127.0.0.1 ggns2dss81 localhost.localdomain localhost
::1 localhost6.localdomain6 localhost6
192.168.253.8 abcdserver
192.168.253.20 testwsserver
现在在我的 node.js
中,我可以读取该文件的内容,但我需要获取给定的 hostname
。
hostname = "testwsserver"
hostIP = getIP(hostname);
console.log(hostIP); // This should print 192.168.253.20
PS - npm pkg
或任何第三方包无法安装在机器上。
非常感谢帮助!!
怎么样NodeJS documentation - DNS – 你检查了吗?
const dns = require('dns')
dns.lookup('testwsserver', function(err, result) {
console.log(result)
})
仅以 Krzysztof Safjanowski 的回答为基础,
您还可以使用内置 promisify 实用程序将其转换为承诺而不是回调。
const util = require('util');
const dns = require('dns');
const lookup = util.promisify(dns.lookup);
try {
result = await lookup('google.com')
console.log(result)
} catch (error) {
console.error(error)
}
这是一个使用标准 modules, promises, and async/await 的示例:
import { default as dns } from 'dns';
async function getIP(hostname)
{
let obj = await dns.promises.lookup(hostname).catch((error)=>
{
console.error(error);
});
return obj?.address;
}
async function main()
{
let hostname = "whosebug.com";
let hostIP = await getIP(hostname);
console.log(`IP Address of ${hostname}:`, hostIP);
}
main();
您将其保存到以扩展名 mjs
而不是 js
结尾的文件中,这样节点就会知道我们正在使用 ES6 模块的 import
语句而不是commonJS require
语句。