web-dev-qa-db-ja.com

node.js Expressで現在のリクエストのホスト名を取得します

そのため、ここでは簡単なものを見逃しているかもしれませんが、応答を送信する要求オブジェクトが要求されたホスト名を取得する方法を見つけることができないようです。

ユーザーが現在node.jsからアクセスしているホスト名を把握することは可能ですか?

152
Jesse

HTTPリクエストについて話している場合、リクエストホストは次の場所にあります。

request.headers.Host

しかし、それは着信リクエストに依存しています。

詳細は http://nodejs.org/docs/v0.4.12/api/http.html#http.ServerRequest

マシン/ネイティブ情報を探している場合は、プロセスオブジェクトを試してください。

169
cjohn

Osモジュールを使用できます:

var os = require("os");
os.hostname();

http://nodejs.org/docs/latest/api/os.html#os_os_hostname を参照してください

警告:

  1. iPアドレスを使用できる場合-マシンには複数のネットワークカードがあり、指定しない限り、ノードはそれらすべてをリッスンするため、リクエストがどのNICで受信されたかはわかりません入ってくる。

  2. ホスト名はDNSの問題です-複数のDNSエイリアスが同じマシンを指すことを忘れないでください。

268
stephenbez

ここに代替があります

req.hostname

Express Docs でそれについて読んでください。

9
Eddie

Linuxで完全修飾ドメイン名が必要でHTTPリクエストがない場合は、次を使用できます。

var child_process = require("child_process");

child_process.exec("hostname -f", function(err, stdout, stderr) {
  var hostname = stdout.trim();
});
7
dricket

まず、答えを提供する前に、ヘッダーを信頼することで、フィッシングなどのセキュリティ脆弱性への扉が開かれているという事実について前もって述べたいと思います。そのため、リダイレクトの目的で、最初にURLが承認されていることを検証せずにヘッダーの値を使用しないでください。

次に、オペレーティングシステムのホスト名がDNSのホスト名と一致するとは限りません。実際、1つのIPに複数のDNS名がある場合があります。そのため、HTTPの目的では、オペレーティングシステム構成でマシンに割り当てられたホスト名が使用可能であるという保証はありません。

私が考えることができる最良の選択は、HTTPリスナーのパブリックIPを取得し、DNSを介してその名前を解決することです。詳細については、dns.reverseメソッドを参照してください。ただし、IPには複数の名前が関連付けられている場合があることに注意してください。

5
arboreal84