2017-06-02 7 views
0

NodeJSでLinuxの/ etc/hostsファイルをバイパスする方法はありますか?NodeJS、Linuxホストファイルをバイパスする

私は私のホストにエントリを持っている場合たとえば、のようなファイル: 127.0.0.1 example.com

私はNodeJSから「本当の」example.comにアクセスする方法は?

私は/ etc/hostsを一時的に修正して、問題を引き起こす可能性があるため、クリーンな解決策ではありません。

ありがとうございます!

+0

なぜあなたは最初にそれをしたいですか? –

+0

@OmriLuzon説明するのは本当に複雑です。基本的には、私のLinuxインスタンス上のすべての可能なアプリケーション(私が制御しないものでも)がexample.comが127.0.0.1を指していると思うようにしたいが、example.comと考えるために作成している特定のNodeJSアプリケーションは、 IP。 –

+0

私はこれが可能であるとは思わない。それはかなり奇妙なユースケースです。 1つのオプションは、コンテナ化や仮想化を使用してアプリを内部で実行することでしょうか?このようにして、別々の '/ etc/hosts'ファイルを作成することができます。 –

答えて

2

私は最初は可能ではないと思っていましたが、その後私はignore the hosts file on Linuxへの道を見つけました。さらに、ノードに組み込まれたDNS APIが見つかりました。基本的には、デフォルトでは、Nodeはオペレーティングシステムに対してDNSルックアップを実行します(DNSルックアップは、/etc/hostsから読み込まれ、DNSクエリを作成する必要はない場合は実行されません)。ただし、Nodeは明示的にDNS要求を行うことでホスト名を解決する方法も公開しています。これはあなたが探しているIPアドレスを与えるでしょう。

$ cat /etc/hosts 
<snip> 
127.0.0.1 google.com 
$ ping google.com 
PING google.com (127.0.0.1) 56(84) bytes of data. 
... 

これは、ホストファイルが間違いなく機能していることを示しています。

const dns = require('dns') 

// This will use the hosts file. 
dns.lookup('google.com', function (err, res) { 
    console.log('This computer thinks Google is located at: ' + res) 
}) 

dns.resolve4('google.com', function (err, res) { 
    console.log('A real IP address of Google is: ' + res[0]) 
}) 

これは期待通りに異なる値を出力します。私は、最新のノードV8.0.0を使用してこれをテストし

$ node host.js 
This computer thinks Google is located at: 127.0.0.1 
A real IP address of Google is: 69.77.145.253 

注意。しかし、私はいくつかの古いドキュメントを見て、APIは少なくともv0.12以来存在していたので、大幅に変更されていないと仮定すると、実行しているNodeのバージョンに関係なく動作します。また、ホスト名をIPアドレスに解決することは、戦闘の半分に過ぎないかもしれません。一部のWebサイトは、IP経由で直接アクセスしようとすると、奇妙な(またはまったく)動作しません。

+0

ありがとう、私はちょうどそのIPに要求を送ることができますが、ホストヘッダーを適切に選択することができますので、これは完璧です。 –

関連する問題