12
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

nem / symbolAdvent Calendar 2023

Day 4

ピアノードの情報を調べるスクリプト

Last updated at Posted at 2023-12-04

はじめに

ロールにピアを持っているノードから REST を使わずに情報を取り出す。と、いうやつです。
Voting のみの場合などピアもってないノードの検証はしてません。テストネットにもないんですよ...

「SymbolピアノードとPythonで会話する」では/node/infoだけでしたが、/chain/info/node/peers/node/unlockedaccountを追加で実装したものになります。

環境

Python3.9 以上
OpenSSL1.1.1 以上

Ubuntu22 なら標準で要件満たすと思います。
Windows でも上記をインストールすれば実行できます。

準備

必要な Python パッケージをインストール

sudo pip install symbol-sdk-python pyopenssl zenlog

ルートにインストールしたくない場合

pip install symbol-sdk-python pyopenssl zenlog --user

peer-tools と symbol-node-configurator をクローン

symbol-node-configurator が古い方の SymbolSDK 参照していたので、今のバージョンを見るようにインポート部分を変更してます。

git clone https://github.com/ccHarvestasya/peer-tools.git
git clone https://github.com/ccHarvestasya/symbol-node-configurator.git

CA プライベートキー生成

openssl を使用して CA プライベートキーを生成します。

cd peer-tools
openssl genpkey -algorithm ed25519 -outform PEM -out ca.key.pem

証明書の生成

symbol-node-configurator の certtool を使用してノードの証明書を作成します。
my cool CAとかmy cool node nameの部分は、好きに変えて問題ないです。ただ、証明書を参照した際に見えるので、変なのにはしない方が良いです。

python3 ../symbol-node-configurator/certtool.py --working cert --name-ca "my cool CA" --name-node "my cool node name" --ca ca.key.pem

出来た証明書を連結します。

cat cert/node.crt.pem cert/ca.crt.pem | tee cert/node.full.crt.pem

ノードの設定

trustedHosts

Unlockedaccount を取得するには、ノード側の設定が必要です。

  • 実行するマシンの IP/Host をノードの trustedHosts に設定する必要があります(許可されたマシンにしか応答しません)。

  • extension.diagnostics が有効になっている必要があります。

trustedHosts はカスタムプリセットに設定すれば良いかと思います。
空にすることで、全ての IP に対して有効となります  。が、セキュリティ的にひじょ~に良くないのでキチンと指定しましょう。
symbol-bootstrap がインストールされているマシン上での実行なら 172.20.0.1 を許可すれば良いです。なお、複数指定したい場合は、カンマ区切りで記述します。

my-preset.yml
trustedHosts: 172.20.0.1

「どの IP を許可すれば分からないよ!!」という場合は、一度実行してみてノードログを見ましょう。
ignoring unknown packet of type Unlocked_Accounts を探し出して、表示されてる IP を許可すれば良いです。

<warning> (net::ChainedSocketReader.cpp@71) D4794B69B5683348F0A1BDF8ACF052CA84C2598E7050FDD9234789A9197FE6F2 @ 203.135.231.85 read completed with error: Malformed_Data
<warning> (ionet::SocketReader.cpp@75) D4794B69B5683348F0A1BDF8ACF052CA84C2598E7050FDD9234789A9197FE6F2 @ 203.135.231.85 ignoring unknown packet of type Unlocked_Accounts
<warning> (ionet::PacketHandlers.cpp@115) rejecting packet Unlocked_Accounts with size 8 from 203.135.231.85

上記では、IP は 203.135.231.85 という事が分かります。

diagnostics の有効化

extension.diagnostics は symbol-bootstrap ならデフォルトで有効だと思います。
(target/nodes/dhealth-peer-node/server-config/resources/config-extensions-server.properties にありま)

実行

出力は Json 形式にしました。Rest ゲートウェイが返すのを真似てます。
たとえば、ローカルにあるノードの nodeInfo を取得する場合。

$ python3 peer_tools.py ni
{
  "version": 16777990,
  "publicKey": "7587ECE8D3FA11A075E533E83F2F1CC8E09F7D2E1D1BD547A44AC5D4D4C78242",
  "networkGenerationHashSeed": "49D6E1CE276A85B70EAFE52349AACCA389302E7A9754BCF1221E79494FC665A4",
  "roles": 1,
  "port": 7900,
  "networkIdentifier": 152,
  "host": "symbol02.harvestasya.com",
  "friendlyName": "_Symbol_TestNet_HarvestasyaNode02/.",
  "nodePublicKey": "5CFF56769EABA56315233552C849BA9FF6A72130F6AF802996C2EB0EA05AAD6F"
}

他コマンドはこのようになっています。

$ python3 peer_tools.py

peer_tools.py COMMAND [HOSTNAME] [PORT]

COMMANDS
  chainInfo                     /chain/info
  nodeInfo                      /node/info
  nodePeers                     /node/peers
  nodeUnlockedaccount           /node/unlockedaccount
HOSTNAME
  default: 127.0.0.1
PORT
  default: 7900

長ったらしいコマンドはキライなので、ci、ni、np、nu でも動くようにしています。

ネット経由で見る

外出中もちゃんと動いているか確認したい事があると思うので、peer_tools の機能を Web から確認できるようにしたpeer_simple_restを同梱しています。peer_tools と同じ機能が Rest と同じパスで使用できます。
ピア単体でも委任が URL で出来るようになります。

追加で必要なパッケージをインストール

pip install flask waitress --user

Web サービスの起動

nohup waitress-serve --port=3000 peer_simple_rest:app > waitress-serve.log 2>&1 &

バックグラウンドで起動します。3000 ポート解放を忘れずに。
終了は waitress-serve を kill して下さい。

$ ps -A | grep waitress-serve
 261858 ?        00:00:01 waitress-serve
$ kill 261858

確認

各自のドメインで以下のパスにアクセスしてください。

/chain/info
/node/info
/node/peers
/node/unlockedaccount

12
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?