Reputation: 368
I need to resolve hostname defined in hosts file to its corresponding IP address.
For example my host file look like this - "/etc/hosts"
127.0.0.1 ggns2dss81 localhost.localdomain localhost
::1 localhost6.localdomain6 localhost6
192.168.253.8 abcdserver
192.168.253.20 testwsserver
Now in my node.js
, i can read content of this file, but i need to fetch for given hostname
.
hostname = "testwsserver"
hostIP = getIP(hostname);
console.log(hostIP); // This should print 192.168.253.20
PS - npm pkg
or any third party package cannot be installed on machine.
Help is much appreciated!!
Upvotes: 20
Views: 42969
Reputation: 11454
Here's an example using standard 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 = "stackoverflow.com";
let hostIP = await getIP(hostname);
console.log(`IP Address of ${hostname}:`, hostIP);
}
main();
You'd save this to a file ending with the extension mjs
instead of js
, so that node will know we're using the ES6 module's import
statement instead of the commonJS require
statement.
Upvotes: 2
Reputation: 11827
Just to build on Krzysztof Safjanowski's answer,
you can also use the builtin promisify utility to convert it to a promise rather than a callback.
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)
}
Upvotes: 8
Reputation: 7438
How about NodeJS documentation - DNS – have you checked it?
const dns = require('dns')
dns.lookup('testwsserver', function(err, result) {
console.log(result)
})
Upvotes: 48