NodeJS有繞過linux的/ etc/hosts文件的方法嗎?NodeJS,繞過linux的hosts文件
舉例來說,如果我有我的主機入口文件,如: 127.0.0.1 example.com
我怎麼會進入「真正的」 example.com從的NodeJS?
我不想臨時修改/ etc/hosts來做到這一點,因爲它會帶來一些問題,並不是一個乾淨的解決方案。
在此先感謝!
NodeJS有繞過linux的/ etc/hosts文件的方法嗎?NodeJS,繞過linux的hosts文件
舉例來說,如果我有我的主機入口文件,如: 127.0.0.1 example.com
我怎麼會進入「真正的」 example.com從的NodeJS?
我不想臨時修改/ etc/hosts來做到這一點,因爲它會帶來一些問題,並不是一個乾淨的解決方案。
在此先感謝!
我一開始並不認爲是可能的,但後來我偶然發現了一個去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直接訪問它們,某些網站會表現得很奇怪(或根本沒有)。
謝謝,這是完美的,因爲我可以發送請求到該IP,但適當地選擇主機頭。 –
爲什麼你想這樣做呢? –
@OmriLuzon解釋真的很複雜。基本上,我希望我的Linux實例(甚至是我不能控制的)上的所有可能的應用程序將example.com指向127.0.0.1,但我創建的一個特定的NodeJS應用程序指向example.com IP。 –
我不相信這是可能的。這是一個非常奇怪的用例。一種選擇是使用集裝箱化還是虛擬化,然後在裏面運行你的應用程序?這樣你可以有一個單獨的'clean''/ etc/hosts'文件。 –