以太坊收集爬虫,深度分析以太坊收集

币安投资 5 17

之前不断传闻黑客RPC盗币,觉得挺有意思的,比来也体验了一下。那个Bug最新版的geth客户端已经没有,Http挪用解锁账户早已被禁掉,以太坊Holder不需要担忧。

写那篇文章是想让区块链充满兴趣性,不再是核心开发者中晦涩的代码。目前以太坊收集中同化着良多其他链的节点信息,因为良多公链基于以太坊二次开发,没有修改p2p参数,招致节点信息污染了实在的以太坊节点。通过`devp2p节点发现`拿到的节点数据,通过查询`network ID`,有很大一部门不属于以太坊收集,有趣的是在那些链里面,查询你本身的账户,余额竟然不为零,可惜有的项目不开源,都不晓得是哪些公链项目。 ### 矿池钱包 为了让各人有读下去的欲望,先抛出一个发现,通过扫描全网节点,发现了一个矿池**Hiveon Pool**,里面有6个账户,以太坊总持仓在`1W`个摆布。那是此中一个地址**0x4c549990a7ef3fea8784406c1eecc98bf4211fa5**。 ### 可用RPC节点 以下是扫描到的一些可用RPC节点,Dapp末于能够愉快的摆设了。 * 处理Dapp开发没有摆设节点 * 快速同步老是逃不上最新块 * 同步占用硬盘和同步慢 利用下面节点发送`离线交易`可快速实现合约和转账操做,GAS费不要太低就行,离线交易的平安性在于节点无法做恶,只可选择能否继续播送。 ``` http://95.217.58.225:8545 apis map[admin:1.0 eth:1.0 miner:1.0 net:1.0 personal:1.0 rpc:1.0 txpool:1.0 web3:1.0] http://144.91.122.52:8545 apis map[eth:1.0 net:1.0 personal:1.0 rpc:1.0 web3:1.0] http://95.217.163.203:8545 apis map[eth:1.0 net:1.0 rpc:1.0 web3:1.0] http://167.99.192.187:8545 apis map[admin:1.0 debug:1.0 eth:1.0 ethash:1.0 net:1.0 personal:1.0 rpc:1.0 txpool:1.0 web3:1.0] http://142.93.227.185:8545 apis map[eth:1.0 net:1.0 rpc:1.0 web3:1.0] http://161.97.81.18:8545 apis map[debug:1.0 eth:1.0 net:1.0 parity:1.0 parity_accounts:1.0 parity_pubsub:1.0 parity_set:1.0 parity_transactions_pool:1.0 personal:1.0 private:1.0 pubsub:1.0 rpc:1.0 secretstore:1.0 signer:1.0 traces:1.0 web3:1.0] http://46.4.63.234:8545 apis map[admin:1.0 eth:1.0 miner:1.0 net:1.0 personal:1.0 rpc:1.0 txpool:1.0 web3:1.0] http://157.230.142.236:8545 apis map[eth:1.0 net:1.0 rpc:1.0] http://46.4.86.252:8545 apis map[admin:1.0 eth:1.0 miner:1.0 net:1.0 personal:1.0 rpc:1.0 txpool:1.0 web3:1.0] http://95.217.87.230:8545 apis map[eth:1.0 personal:1.0 rpc:1.0 web3:1.0] http://195.154.81.121:8545 apis map[debug:1.0 eth:1.0 net:1.0 parity:1.0 parity_accounts:1.0 parity_pubsub:1.0 parity_set:1.0 personal:1.0 private:1.0 pubsub:1.0 rpc:1.0 secretstore:1.0 shh:1.0 shh_pubsub:1.0 signer:1.0 traces:1.0 web3:1.0] http://49.12.93.10:8545 apis map[admin:1.0 debug:1.0 eth:1.0 net:1.0 personal:1.0 rpc:1.0 txpool:1.0 web3:1.0] http://165.227.99.131:8545 apis map[eth:1.0 net:1.0 rpc:1.0] ``` 那些大部门是`geth节点`,少量是`parity节点`,因为较熟悉geth代码,所以下面的操做都是基于Geth客户端。 **原理可读上一篇文章。** ### 查询节点信息 在上篇文章中已讲过大致的原理,通过节点发现不断的遍历全网节点,利用默认的8545端口去毗连,获取毗连胜利的节点。 以太坊默认开发的api是`[eth:1.0 net:1.0 rpc:1.0 web3:1.0]`那几个,可通过`SupportedModules`办法获取 #### 过滤主网节点 节点发现了太多的无用节点,需要通过`network ID`和`chainID`过滤拿到主网节点。 ``` client.Call( ver, "net_version") client.CallContext(ctx, result, "eth_chainId") ``` #### 查询矿工信息 ``` err := client.Call( mine, "eth_mining") err = client.Call( coinbase, "eth_coinbase") err = client.Call( hashrate, "eth_hashrate") ``` 上面的办法可依次查询节点能否在挖矿,查询挖矿奖励地址和当前挖矿的hash率。 #### 查询节点账户 ``` err := client.Call( account, "eth_accounts") ``` 那个返回的是当前节点的账户数,通过keystore导入到节点中的账户,地址城市返回出来。 #### 查询账户余额 ``` client.Call( result, "eth_getBalance", account, toBlockNumArg(blockNumber)) ``` 此api可将节点的挖矿地址和账户余额都查询出来。 #### 查询账户信息 ``` client.Call( raws, "personal_listWallets") for _, account := range raws { if account.Status == "Unlocked" { arr = append(arr, rawAccount{"Unlocked", account.Accounts[0].Address.String()}) } else { arr = append(arr, rawAccount{"Locked", account.Accounts[0].Address.String()}) } } ``` 此办法可查询节点账户形态,能否锁定,需要节点启动时显示指定。 #### 转账 ``` ec.c.CallContext(ctx, nil, "eth_sendRawTransaction", hexutil.Encode(data)) ``` 此办法为倡议离线交易 ``` err := client.Call( result, "eth_sendTransaction", mapData) ``` 此办法需要节点签名交易,一般情况下会返回`账户锁定`错误。

写那篇文章是想让区块链充满兴趣性,不再是核心开发者中晦涩的代码。目前以太坊收集中同化着良多其他链的节点信息,因为良多公链基于以太坊二次开发,没有修改p2p参数,招致节点信息污染了实在的以太坊节点。通过devp2p节点发现拿到的节点数据,通过查询network ID,有很大一部门不属于以太坊收集,有趣的是在那些链里面,查询你本身的账户,余额竟然不为零,可惜有的项目不开源,都不晓得是哪些公链项目。

矿池钱包

为了让各人有读下去的欲望,先抛出一个发现,通过扫描全网节点,发现了一个矿池Hiveon Pool,里面有6个账户,以太坊总持仓在1W个摆布。那是此中一个地址0x4c549990a7ef3fea8784406c1eecc98bf4211fa5。

可用RPC节点

以下是扫描到的一些可用RPC节点,Dapp末于能够愉快的摆设了。

处理Dapp开发没有摆设节点 快速同步老是逃不上最新块 同步占用硬盘和同步慢

利用下面节点发送离线交易可快速实现合约和转账操做,GAS费不要太低就行,离线交易的平安性在于节点无法做恶,只可选择能否继续播送。

http://95.217.58.225:8545 apis map[admin:1.0 eth:1.0 miner:1.0 net:1.0 personal:1.0 rpc:1.0 txpool:1.0 web3:1.0] http://144.91.122.52:8545 apis map[eth:1.0 net:1.0 personal:1.0 rpc:1.0 web3:1.0] http://95.217.163.203:8545 apis map[eth:1.0 net:1.0 rpc:1.0 web3:1.0] http://167.99.192.187:8545 apis map[admin:1.0 debug:1.0 eth:1.0 ethash:1.0 net:1.0 personal:1.0 rpc:1.0 txpool:1.0 web3:1.0] http://142.93.227.185:8545 apis map[eth:1.0 net:1.0 rpc:1.0 web3:1.0] http://161.97.81.18:8545 apis map[debug:1.0 eth:1.0 net:1.0 parity:1.0 parity_accounts:1.0 parity_pubsub:1.0 parity_set:1.0 parity_transactions_pool:1.0 personal:1.0 private:1.0 pubsub:1.0 rpc:1.0 secretstore:1.0 signer:1.0 traces:1.0 web3:1.0] http://46.4.63.234:8545 apis map[admin:1.0 eth:1.0 miner:1.0 net:1.0 personal:1.0 rpc:1.0 txpool:1.0 web3:1.0] http://157.230.142.236:8545 apis map[eth:1.0 net:1.0 rpc:1.0] http://46.4.86.252:8545 apis map[admin:1.0 eth:1.0 miner:1.0 net:1.0 personal:1.0 rpc:1.0 txpool:1.0 web3:1.0] http://95.217.87.230:8545 apis map[eth:1.0 personal:1.0 rpc:1.0 web3:1.0] http://195.154.81.121:8545 apis map[debug:1.0 eth:1.0 net:1.0 parity:1.0 parity_accounts:1.0 parity_pubsub:1.0 parity_set:1.0 personal:1.0 private:1.0 pubsub:1.0 rpc:1.0 secretstore:1.0 shh:1.0 shh_pubsub:1.0 signer:1.0 traces:1.0 web3:1.0] http://49.12.93.10:8545 apis map[admin:1.0 debug:1.0 eth:1.0 net:1.0 personal:1.0 rpc:1.0 txpool:1.0 web3:1.0] http://165.227.99.131:8545 apis map[eth:1.0 net:1.0 rpc:1.0]

那些大部门是geth节点,少量是parity节点,因为较熟悉geth代码,所以下面的操做都是基于Geth客户端。 原理可读上一篇文章。

查询节点信息

在上篇文章中已讲过大致的原理,通过节点发现不断的遍历全网节点,利用默认的8545端口去毗连,获取毗连胜利的节点。 以太坊默认开发的api是[eth:1.0 net:1.0 rpc:1.0 web3:1.0]那几个,可通过SupportedModules办法获取

过滤主网节点

节点发现了太多的无用节点,需要通过network ID和chainID过滤拿到主网节点。

client.Call( ver, "net_version") client.CallContext(ctx, result, "eth_chainId") 查询矿工信息 err := client.Call( mine, "eth_mining") err = client.Call( coinbase, "eth_coinbase") err = client.Call( hashrate, "eth_hashrate")

上面的办法可依次查询节点能否在挖矿,查询挖矿奖励地址和当前挖矿的hash率。

查询节点账户 err := client.Call( account, "eth_accounts")

那个返回的是当前节点的账户数,通过keystore导入到节点中的账户,地址城市返回出来。

查询账户余额 client.Call( result, "eth_getBalance", account, toBlockNumArg(blockNumber))

此api可将节点的挖矿地址和账户余额都查询出来。

查询账户信息 client.Call( raws, "personal_listWallets") for _, account := range raws { if account.Status == "Unlocked" { arr = append(arr, rawAccount{"Unlocked", account.Accounts[0].Address.String()}) } else { arr = append(arr, rawAccount{"Locked", account.Accounts[0].Address.String()}) }

此办法可查询节点账户形态,能否锁定,需要节点启动时显示指定。

ec.c.CallContext(ctx, nil, "eth_sendRawTransaction", hexutil.Encode(data))

此办法为倡议离线交易

err := client.Call( result, "eth_sendTransaction", mapData)

此办法需要节点签名交易,一般情况下会返回账户锁定错误。

本文参与登链社区写做鼓励方案 ,好文好收益,欢送正在阅读的你也参加。

颁发于 2020-08-10 22:34 阅读 ( 1362 ) 学分 ( 74 ) 分类:以太坊

也许您对下面的内容还感兴趣:

留言5

  1. 晨风玲琅
    回复
    买bnb,cake
  1. 百花浩广
    回复
    话说如果比特币暴涨,其它币资金都会被比特币吸血
  1. 丹秋公子
    回复
    我在暴跌那天买的,成本0.21
  1. 风啸嘉良
    回复
    U一定程度还是跟汇率的
  1. 一条小斯乔
    回复
    我的比特币在钱包里取不出来了,因为没有gas.谁能转账我一个ETH.我将比特币拿出来后还给他

评论

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。