在Node.js(在Windows上运行)如何获取域名

时间:2012-06-27 12:08:08

标签: node.js dns

我有条件要求我的NodeJS http服务器(在Windows上)必须侦听主机名而不是localhost / 127.0.0.1。

为此,我需要Windows机器的完整主机名(包括域名),但我无法获得完整的主机名。

我尝试使用

require('os').hostname()     

但它没有给我完整的主机名。

所以我尝试了下面的内容:

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);    
});    
})     

上面的代码工作正常,当我在我的企业的以太网上时,我得到以下输出

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

但是当我连接到企业的无线网络时,相同的代码不起作用

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

所以需要下面的帮助

  1. 是否有一种简单的方法可以在Node.js中获取完整的机器名称(Windows)
  2. 或者,请告诉我上面的代码有什么问题

2 个答案:

答案 0 :(得分:1)

服务器不监听主机名,它们监听IP地址。您永远不应该依赖外部DNS的内容来确定绑定的位置。

最简单的解决方案是将其绑定到INADDR_ANY地址,该地址在数字上等同于0.0.0.0

这将允许在任何接口上进行查询,包括环回。

答案 1 :(得分:0)

您不需要完整的主机名来监听,实际上您需要您的IP地址。查看os.networkInterfaces()功能。