Geth搭建以太坊私链并连接对方以太坊节点的geth客户端


前言

原本是老师push的一个关于”RPC漏洞检测“的小任务,涉及到以太坊节点的连接及对方geth节点信息的获取。这篇会对以太坊rpc端口简单介绍、记录geth节点连接过程以及过程中遇到的小bug。


提示:不排除由于系统不同的原因导致bug解决方法不同。

一、RPC漏洞利用

1. RPC漏洞介绍

RPC(remote procedure call)远程过程调用是一个计算机通信协议,该协议允许运行于一台计算机的程序调用另一台计算机的子程序。

2. 以太坊RPC漏洞利用

以太坊节点提供RPC API用于对接矿池、钱包等其他第三方程序。默认情况下,节点的RPC服务是无需密码就可以进行接口调用,因此,一旦将RPC端口暴露在互联网非常危险。
通过eth_accounts方法获取节点的以太坊地址,直接溯源
通过admin_peers方法获取节点的当前连接,可用于其他节点的推测溯源

二、Geth是什么

Geth是以太坊的客户端,有两种方法进行获取,一种是直接下载程序进行安装,另一种是通过编译源码安装。这里我选择的是通过下载程序安装,可以参考以太坊(Ethereum)之Geth,这里直接下载程序进行安装,不是重点不在阐述。

三、实验过程

1. 实验环境

节点位于日本东京,选择Ubuntu 22.04 64位操作系统,geth版本为1.13.8。

2. 发现开放rpc接口的以太坊节点

在ethernodes.org 或 etherscan.io发现可以一些公开的以太坊节点的信息,包括IP地址、端口号、客户端版本等。
公开的以太坊节点
接着,使用主动端口扫描的方式(扫描工具masscan)扫描由上面整理的IP地址范围或网络段,寻找开放了8545端口(以太坊默认的JSON-RPC端口)的节点。
masscan进行端口扫描

3. 验证以太坊节点真实性

验证IP是否开启JSON-RPC端口:向以太坊节点编写好的脚本,脚本构造了发送的JSON-RPC请求,根据响应状态码以及响应内容(包含jsonrpc字段),则认为开放了JSON-RPC端口,保留IP。

4.创建并配置geth客户端

Ⅰ 安装Geth客户端

打开命令行窗口,依次执行以下命令:

sudo apt-get install software-properties-common
sudo add-apt-repository -y ppa:ethereum/ethereum
sudo add-apt-repository -y ppa:ethereum/ethereum-dev
sudo apt-get update
sudo apt-get install ethereum

一路选择”y“,下面是我的运行结果
运行结果
然后可以查看验证一下geth版本和命令参数……

geth --help

geth信息

Ⅱ 创建创世区块

创建工作目录

mkdir ~/privatechain

在工作目录下创建用于存放账户信息和区块数据的目录(即data)

mkdir ~/privatechain/data

创建创世区块的配置文件

cd privatechain
touch genesis.json
vim genesis.json

genesis.json的详细文件内容如下:

{
  "config": {
        "chainId": 202311061200,
        "homesteadBlock": 0,
        "eip155Block": 0,
        "eip158Block": 0,
        "eip150Block": 0,
    	"byzantiumBlock": 0,
        "constantinopleBlock": 0,
        "petersburgBlock": 0,
        "istanbulBlock": 0
  },
  "alloc"      : {},
  "coinbase"   : "0x0000000000000000000000000000000000000000",
  "difficulty" : "0x20000",
  "extraData"  : "",
  "gasLimit"   : "0x2fefd8",
  "nonce"      : "0x0000000000000042",
  "mixhash"    : "0x0000000000000000000000000000000000000000000000000000000000000000",
  "parentHash" : "0x0000000000000000000000000000000000000000000000000000000000000000",
  "timestamp"  : "0x00"
}

其中,chainid指定了独立的区块链网络 ID。网络 ID 在连接到其他节点的时候会用到,以太坊公网的网络 ID 是 1,为了不与公有链网络冲突,运行私有链节点的时候要指定自己的网络 ID。不同 ID 网络的节点无法相互连接。其他的参数和描述很多博主都写得很全了,我也就不再多说。
定义完之后就可以创建创世区块啦

cd ~/privatechain
geth --datadir ./data init genesis.json

创建结果

看生成的目录,geth目录用于保存我们所建私有链的区块数据,keystore目录用于保存用户的账户数据。
目录
接着,就可以启动私有链。

Ⅲ 启动私有链

geth --datadir data --networkid 202311061200 --rpc.enabledeprecatedpersonal --http --http.addr 0.0.0.0 console 2>2.log

有的uu们可能会出现下面“Fatal: Failed to register the Ethereum service”的报错,这是因为datadir目录的路径不对,如果执行上述命令记得先返回root。
报错
返回root再执行
修改后启动成功
【注意】–networkid参数即为创世区块配置文件中的chainId。

Ⅳ 对geth客户端进行操作

随便举几个例子:
比如,创建账户,参数值为密码:

> personal.newAccount("001")
> personal.newAccount("002")

创建账户后会返回一个哈希值(代表新建账户的地址)
创建账户
查询私链上的账户信息(对应上面创建的俩个账户)
私链账户信息
查询私链上账户的账户余额,账户当作一个列表,查询第几个账户取下标即可。
第一个账户的余额
到这里,还有很多……

5. 连接对方节点geth客户端并查询信息安装Geth

为方便测试,我配置了两个节点的geth客户端,分别是geth01(202.182.121.223)和geth02(207.148.105.75)

geth attach http://xxx.xxx.xxx.xxx:8545
# xxx.xxx.xxx.xxx表示对方节点IP

直接使用命令连接很可能就直接报错了。
context deadline exceeded

原因:对方节点(geth02)防火墙未开启8545端口,进入geth02开启端口
开启8545端口
然后再使用geth01连接geth02,连接成功!
成功连接对方节点geth客户端
接着就可以获取geth02的信息啦!还有有很多属性可供查询……
获取对方节点信息
以上仅供参考!欢迎批评指正!

  • 20
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
搭建本地以太坊私链连接钱包实现转账,需要以下步骤: 1. 安装Geth客户端 Geth是以太坊客户端软件,可以用于连接以太坊网络。可以从https://geth.ethereum.org/downloads/下载Geth安装包并安装。 2. 创建创世块 在创建私链之前,需要先创建创世块。可以使用Puppeth工具来创建创世块,该工具可以从https://github.com/ethereum/go-ethereum/releases下载。使用Puppeth可以选择网络ID、区块时间、初始难度等选项,并生成创世块配置文件。 3. 初始化私链 使用以下命令来初始化私链: ``` geth --datadir /path/to/chaindata init /path/to/genesis.json ``` 其中,/path/to/chaindata为私链数据存储路径,/path/to/genesis.json为创世块配置文件路径。执行该命令后,私链数据存储路径下会生成相应的数据文件。 4. 启动私链 使用以下命令来启动私链: ``` geth --datadir /path/to/chaindata --networkid 1234 --rpc --rpcport "8545" --rpcaddr "127.0.0.1" --rpccorsdomain "*" --rpcapi "eth,net,web3,personal" --nodiscover console ``` 其中,/path/to/chaindata为私链数据存储路径,--networkid为私链的网络ID,--rpc为启用RPC服务,--rpcport为RPC服务端口,--rpcaddr为RPC服务IP地址,--rpccorsdomain为跨域访问配置,--rpcapi为RPC接口配置,--nodiscover为禁用节点发现。执行该命令后,会启动私链节点并进入控制台。 5. 创建钱包 在私链节点控制台中,使用以下命令来创建钱包: ``` personal.newAccount() ``` 执行该命令后,会提示输入密码,并返回钱包地址。 6. 解锁钱包 使用以下命令来解锁钱包: ``` personal.unlockAccount("钱包地址", "密码", 0) ``` 其中,"钱包地址"为钱包地址,"密码"为钱包密码,0为解锁时长,表示永久解锁。执行该命令后,会返回true表示解锁成功。 7. 转账 在私链节点控制台中,使用以下命令来转账: ``` eth.sendTransaction({from: "发送方钱包地址", to: "接收方钱包地址", value: web3.toWei(1, "ether")}) ``` 其中,"发送方钱包地址"为发送方钱包地址,"接收方钱包地址"为接收方钱包地址,web3.toWei(1, "ether")为转账金额,表示1个以太币。执行该命令后,会返回交易哈希值。 8. 查询余额 使用以下命令来查询钱包余额: ``` eth.getBalance("钱包地址") ``` 其中,"钱包地址"为钱包地址。执行该命令后,会返回钱包余额。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值