Was sind IPC und RPC?

Die Frage ist ganz einfach, ich habe nur eine grundlegende Vorstellung von RPC, aber keine von IPC.

AFAIK, wenn ich mich über IPC mit dem Ethereum-Knoten verbinde, sollte mein Geth auf demselben Computer laufen. und wenn ich mich über RPC verbinde, könnte mein Geth auf jedem Remote-Computer laufen. Gibt es noch etwas, das ich wissen sollte.

Auch wenn ich RPC über Geth aktiviere, bedeutet dies, dass sich jeder mit meinem Knoten verbinden kann, oder dass ich einige bestimmte IPs einschränken kann, die eine Verbindung zu meinem Knoten herstellen können. Kann --rpc addrirgendwie helfen?

Ich habe ein paar Linings gemacht und Ether in meine lokale Ethereum-Brieftasche bekommen. Aber wenn ich online nachschaue, ist mein Kontostand 0,00. Wieso den? Wusste das jemand?

Antworten (1)

IPC oder Interprozesskommunikation funktioniert im Allgemeinen auf Ihren lokalen Computern. Im Ethereum-Bereich beinhaltet IPC normalerweise das gethErstellen einer IPC-Pipe (die durch die Datei dargestellt wird $HOME/.ethereum/geth.ipc) im lokalen Dateisystem Ihres Computers.

Andere Prozesse auf demselben Computer können dann die IPC-Datei verwenden, um eine bidirektionale Kommunikation mit geth.

RPC- oder Remoteprozeduraufrufe funktionieren im Allgemeinen auf verschiedenen Computern. Im Ethereum-Raum bezieht sich RPC normalerweise auf den RPC-Endpunkt localhost:8545oder 127.0.0.1:8545oder 192.168.1.123:8545.

Wenn Sie localhost:8545oder 127.0.0.1:8545für Ihren RPC-Endpunkt verwenden, können andere Prozesse NUR auf dem lokalen Computer über diesen RPC-Endpunkt kommunizieren, da localhostnur 127.0.0.1vom lokalen Computer aus darauf zugegriffen werden kann.

Wenn Sie eine nicht lokale IP-Adresse wie verwenden 192.168.1.123, kann jeder andere Computer in Ihrem Netzwerk auf diesen RPC-Endpunkt zugreifen.

Wenn Ihre Internetverbindung Datenverkehr von Ihrer Internet-IP-Adresse an die IP-Adresse Ihres Computers weiterleitet, 192.168.1.123kann jeder Computer aus dem Internet auf Ihren RPC-Endpunkt zugreifen, indem er eine Verbindung zu {Ihre Internet-IP-Adresse}:8545 herstellt.

Wie unter Wie können Sie die Wahrscheinlichkeit verringern, dass Ihre Ethereum-Brieftasche gehackt wird? , leitete der Benutzer Patrick seinen Internet-IP-Adressenverkehr für Port 8545 an die nicht lokale IP-Adresse seines Computers weiter (z. B. 192.168.1.123 anstelle von 127.0.0.1). Als Patrick sein Konto entsperrte, um Geld zu überweisen, konnte ein Angreifer aus dem Internet gethJSON-RPC-Befehle ausführen, um Patricks Ether zu stehlen.

Wenn Sie also RPC über gethaktivieren, aktivieren Sie es mit , --rpcaddr 127.0.0.1wenn Sie möchten, dass es nur von Ihrem lokalen Computer aus zugänglich ist. Wenn Sie es mit Ihrer Netzwerk-IP-Adresse (z. B. 192.168.1.123) aktivieren, können alle Computer aus Ihrem Netzwerk auf gethden RPC-Endpunkt von zugreifen. Wenn Ihr Internetmodem dann den Datenverkehr für Port 8545 aus dem Internet an 192.168.1.123:8545 Ihres Computers weiterleitet, kann jeder aus dem Internet auf gethden RPC-Endpunkt von zugreifen.

Geben Sie also den --rpcaddrParameter nicht an und er wird standardmäßig auf 127.0.0.1 eingestellt, auf das nur von Ihrem lokalen Computer aus zugegriffen werden kann. Wenn Sie von anderen Computern in Ihrem lokalen Netzwerk auf RPC zugreifen möchten, stellen Sie sicher, dass Ihre Internetverbindung kein Internet weiterleitet Datenverkehr zu Ihrer gethMaschine.



Antwort auf Zusatzfrage

Der beste Weg, um zu überprüfen, ob Ihr lokaler Computer auf Kommunikation außerhalb Ihres lokalen Computerbereichs lauscht, besteht darin, Folgendes auszuführen:

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     

In der obigen Tabelle sehen Sie, dass die Ports 8545 (geth), 8181 (mein lokaler Webserver) und 6379 (Redis NoSQL-Datenbank) nur von meinem lokalen Computer aus zugänglich sind. Port 30303 ist jedoch von außerhalb meines lokalen Rechners zugänglich. Da mein ADSL-Router den Datenverkehr von Port 30303 an meinen lokalen Computer weiterleitet, kann die Welt über Port 30303 auf meinen lokalen Computer zugreifen.

IPC und RPC sind in Bezug auf die Zugänglichkeit nicht unbedingt gleich. Wenn Sie über eine IPC-Verbindung verfügen, haben Programme auf Ihrem lokalen Computer möglicherweise Zugriff auf das Programm, das die IPC-Datei überwacht. Ihr Webbrowser hat jedoch keinen Zugriff auf diese Datei, da Webbrowser im Allgemeinen keine Verbindung über IPC herstellen.

Wenn Sie über eine RPC-Verbindung verfügen, auf die von Ihrem lokalen Computer aus zugegriffen werden kann, hat Ihr Webbrowser, der lokal auf Ihrem Computer ausgeführt wird, Zugriff auf Ihre RPC-Verbindung. Der Parameter --rpccorsdomainsoll den Zugriff von Ihrem Webbrowser aus anderen als den von Ihnen angegebenen Domänen einschränken, aber jedes (bösartige) Programm, das auf Ihrem Computer ausgeführt wird, kann diese Anfrage einfach ignorieren (es ist nur eine höfliche Anfrage und keine Einschränkung) und auf Ihren RPC zugreifen Hafen sowieso.

Vielen Dank die perfekte Antwort. Ich habe Zweifel, wenn ich das angebe --rpcaddr localhost, gibt es in diesem Fall praktisch keinen Unterschied zwischen IPC und RPC? bcoz in beiden Fällen können nur Prozesse auf meinem lokalen Rechner mit geth kommunizieren, also scheinen ipc und rpc in diesem Fall gleich zu sein.
Und auch wenn ich verwende --rpcaddr 127.0.0.1, ist das Offenlegen von Personal über RPC ebenfalls nicht anfällig, da nur der Prozess auf meinem Computer eine Verbindung zu Geth herstellen kann. Oder gibt es noch andere Szenarien, die ich übersehen habe?
Siehe Update in Antwort oben. Wenn Sie verwenden --rpcaddr 127.0.0.1und Ihr Computer kompromittiert wurde, kann jedes Programm, das auf Ihrem Computer ausgeführt wird, auf diesen Endpunkt zugreifen. Aber das ist das gleiche über IPC. Wenn Ihr Computer also kompromittiert wurde, gewährt IPC den gleichen Zugriff wie RPC 127.0.0.1 und beide sind anfällig. Sicherheit ist leider schwierig.
Ist geth attacheine Form von IPC?
Es scheint geth.ipckeine permanente Datei zu sein, sondern ein Socket und existiert nicht als Datei. Zumindest nicht auf meinem macOS-Dateisystem. Ich habe überall gesucht /T/geth.ipcusw. /chaindata/geth.ipceinschließlich unsichtbarer Dateien und es existiert nicht. Ich laufe derzeit geth. Kann jemand bestätigen, dass sich diese Datei tatsächlich nicht im Dateisystem befindet?
@OmkarKhair Ich habe IPC-Pipe auf Windows 7, und mein Aufruf muss wie folgt lauten: geth.exe attach ipc:\\.\pipe\geth.ipcWeiß nicht, was $HOME/.ethereum/geth.ipceigentlich ist, wahrscheinlich auf Bash, auf Linux (warum öffentliche Blockchain-Daten in jemandes Verzeichnis /home/user/ speichern? stackoverflow.com /questions/1510104/… ) oder vielleicht anderswo definiert werden?