Surender Panuganti
Surender Panuganti

Reputation: 343

In Node.js (running on Windows) how to get the domain name

I have requirement where my NodeJS http server (on Windows) has to listen on the hostname instead of localhost/127.0.0.1.

For this I need the full hostname (including the domain name) of my Windows machine and I am not able to get the full hostname.

I tried using

require('os').hostname()     

but it does not give me the full hostname.

So I tried the below:

var dns = require('dns');    
var os = require('os');    
var hostname = os.hostname();   
console.log("Short hostname = ", hostname);     

dns.lookup(hostname, function (err, add, fam) {       
    if (err)    
    {    
             console.log("The error = ", JSON.stringify(err));    
             return;    
    }    
    console.log('addr: '+add);     
    console.log('family: ' + fam);    
    dns.reverse(add, function(err, domains){    
    if (err)    
    {    
        console.log("The reverse lookup error = ", JSON.stringify(err));    
        return;    
    }    
    console.log("The full domain name ", domains);    
});    
})     

The above code works fine and I get the below output when I am on the ethernet of my enterprise

C:\>node getFullHostname.js    
Short hostname  =  SPANUGANTI    
addr: 16.190.58.214    
family: 4    
The full domain name  [ 'spanuganti.abc.xyz.net' ]    

But the same code does not work when I am connected to the wireless network of the enterprise

C:\>node getFullHostname.js    
Short hostname  =  SPANUGANTI    
addr: 16.183.204.47    
family: 4    
The reverse lookup error =    
{"code":"ENOTFOUND","errno":"ENOTFOUND","syscall":"getHostByAddr"}   

So need help on the below

  1. Is there a simple way to get the full machine name (Windows) in Node.js
  2. Or please let me know what is the problem with my code above

Upvotes: 1

Views: 4891

Answers (2)

Alnitak
Alnitak

Reputation: 340055

Servers don't listen on hostnames, they listen on IP addresses. You should never rely on the contents of the external DNS to figure out where to bind.

The easiest solution is to have it bind to the INADDR_ANY address, which is numerically equivalent to 0.0.0.0.

This would then allow queries on any interface, including the loopback.

Upvotes: 1

lanzz
lanzz

Reputation: 43208

You don't need the full hostname to listen on, you actually need your IP address. Check out the os.networkInterfaces() function.

Upvotes: 0

Related Questions