Go-Ethereum

什麼是ipc和rpc?

  • January 23, 2018

問題很簡單,我只有RPC的基本概念,沒有IPC。

AFAIK,如果我通過 ipc 連接到乙太坊節點,那麼我的 geth 應該在同一台機器上執行。如果我通過 RPC 連接,那麼我的 geth 可以在任何遠端機器上執行。還有什麼我應該知道的。

此外,如果我通過 geth 啟用 RPC,這是否意味著任何人都可以連接到我的節點,或者有任何方法可以限制某些可以連接到我的節點的特定 IP。--rpc addr能以某種方式提供幫助嗎?

IPC 或程序間通信通常在您的本地電腦上工作。在乙太坊空間中,IPC 通常涉及在電腦的本地文件系統上geth創建 IPC 管道(由 file 表示)。$HOME/.ethereum/geth.ipc

然後,同一台電腦上的其他程序可以使用 IPC 文件與geth.

RPC 或遠端過程呼叫通常在不同的電腦上工作。在乙太坊空間中,RPC 通常指的是 RPC 端點localhost:8545127.0.0.1:8545192.168.1.123:8545

如果您使用RPC 端點,localhost:8545127.0.0.1:8545只有本地電腦上的其他程序才能通過此 RPC 端點進行通信,localhost並且127.0.0.1只能從本地電腦訪問。

如果您使用非本地 IP 地址(如192.168.1.123),則網路上的任何其他電腦都可以訪問此 RPC 端點。

如果您的網際網路連接將流量從您的網際網路 IP 地址轉發到您電腦的 IP 地址192.168.1.123,那麼來自網際網路的任何電腦都可以通過連接到 {您的網際網路 IP 地址}:8545 來訪問您的 RPC 端點。

如何減少乙太坊錢包被黑客入侵的機會中所述?,使用者 Patrick 將他的 Internet IP 地址流量轉發到埠 8545 到他電腦的非本地 IP 地址(例如 192.168.1.123 而不是 127.0.0.1)。當帕特里克解鎖他的賬戶以轉移一些資金時,來自網際網路的攻擊者能夠執行gethJSON-RPC 命令來竊取帕特里克的乙太幣。

因此,如果您確實啟用了 RPC over geth--rpcaddr 127.0.0.1如果您只想從本地電腦訪問它,請啟用它。如果您使用您的網路 IP 地址(例如 192.168.1.123)啟用它,您網路中的所有電腦都將能夠訪問geth的 RPC 端點。如果您隨後讓 Internet 調製解調器將埠 8545 的流量從 Internet 轉發到您電腦的 192.168.1.123:8545,那麼來自 Internet 的任何人都可以訪問gethRPC 端點。

所以,不要指定--rpcaddr參數,它會預設為 127.0.0.1 只能從你的本地電腦訪問,如果你想從本地網路上的其他電腦訪問 RPC,請確保你的網際網路連接不轉發網際網路流量到您的geth機器。


回答附加問題

檢查本地電腦是否正在偵聽本地電腦空間之外的通信的最佳方法是執行以下操作:

Iota:backup user$ netstat -an  | grep LISTEN
tcp4       0      0  127.0.0.1.8545         *.*                    LISTEN     
tcp46      0      0  *.30303                *.*                    LISTEN     
tcp4       0      0  127.0.0.1.8181         *.*                    LISTEN     
tcp4       0      0  127.0.0.1.6379         *.*                    LISTEN     

在上表中,您可以看到埠 8545(geth)、8181(我的本地 Web 伺服器)和 6379(Redis NoSQL 數據庫)只能從我的本地電腦訪問。但是,可以從我的本地電腦外部訪問埠 30303。當我的 ADSL 路由器將流量從埠 30303 轉發到我的本地電腦時,世界可以通過埠 30303 訪問我的本地電腦。

IPC 和 RPC 在可訪問性方面不一定相同。如果您可以訪問 IPC 連接,則本地電腦上的程序可能有權訪問偵聽 IPC 文件的程序。但是您的網路瀏覽器將無法訪問此文件,因為網路瀏覽器通常不通過 IPC 連接。

如果您可以從本地電腦訪問 RPC 連接,則在您的電腦上本地執行的 Web 瀏覽器將可以訪問您的 RPC 連接。該參數--rpccorsdomain旨在限制從您的網路瀏覽器訪問您指定的域以外的域,但您電腦上執行的任何(惡意)程序都可以忽略此請求(這只是一個禮貌的請求,而不是限制)並訪問您的 RPC反正埠。

引用自:https://ethereum.stackexchange.com/questions/10681