2017-06-02 159 views
0

NodeJS有繞過linux的/ etc/hosts文件的方法嗎?NodeJS,繞過linux的hosts文件

舉例來說,如果我有我的主機入口文件,如: 127.0.0.1 example.com

我怎麼會進入「真正的」 example.com從的NodeJS?

我不想臨時修改/ etc/hosts來做到這一點,因爲它會帶來一些問題,並不是一個乾淨的解決方案。

在此先感謝!

+0

爲什麼你想這樣做呢? –

+0

@OmriLuzon解釋真的很複雜。基本上,我希望我的Linux實例(甚至是我不能控制的)上的所有可能的應用程序將example.com指向127.0.0.1,但我創建的一個特定的NodeJS應用程序指向example.com IP。 –

+0

我不相信這是可能的。這是一個非常奇怪的用例。一種選擇是使用集裝箱化還是虛擬化,然後在裏面運行你的應用程序?這樣你可以有一個單獨的'clean''/ etc/hosts'文件。 –

回答

2

我一開始並不認爲是可能的,但後來我偶然發現了一個去ignore the hosts file on Linux的途徑。另外,我發現一個嵌入Node的DNS API。基本上,默認情況下,Node按照操作系統進行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 

注意。但是,我查看了一些較舊的文檔,並且從至少v0.12版本開始存在API,因此,假設沒有任何顯着變化,這應該適用於您正在運行的任何版本的Node。另外,將主機名解析爲IP地址也許只是戰鬥的一半。如果您嘗試通過IP直接訪問它們,某些網站會表現得很奇怪(或根本沒有)。

+0

謝謝,這是完美的,因爲我可以發送請求到該IP,但適當地選擇主機頭。 –