1

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. または、上記のコードの問題点を教えてください
4

2 に答える 2

1

サーバーはホスト名をリッスンせず、IP アドレスをリッスンします。どこにバインドするかを判断するために、外部 DNS の内容に依存するべきではありません。

INADDR_ANY最も簡単な解決策は、数値的に と同等のアドレスにバインドすること0.0.0.0です。

これにより、ループバックを含む任意のインターフェイスでのクエリが可能になります。

于 2012-06-27T12:11:05.763 に答える
0

リッスンするために完全なホスト名は必要ありません。実際には IP アドレスが必要です。機能をチェックしてくださいos.networkInterfaces()

于 2012-06-27T12:10:43.463 に答える