Skip to content

Releases: gomanizm/NetBelt

v1.3.1

Choose a tag to compare

@github-actions github-actions released this 25 Sep 11:58
441ea02

v1.3.1 で変わったこと

外部レビューと、修正ごとの再検査を重ねて見つかった不具合を直しました。

変更

  • 画面: クリアとエクスポートのボタンを、どの画面でも一覧・ログのすぐ上に左寄せで並べました(FTP / TFTP / SFTP サーバーにもエクスポートを追加)
  • 画面: 窓を狭めてもボタンが隠れないようにしました(SNMP は最小幅 1160px → 376px)。SNMP の GET / WALK はポート欄をホストの下へ移しました
  • 保存: ログ記録の開始とエクスポートは、前回保存したフォルダから開きます
  • 保存: エクスポートは、選んだ種類に合わせて拡張子が変わります(Syslog に CSV を追加)。付け替えた先にファイルがあるときは上書きを確認します
  • 端末の範囲選択は、ドラッグした時点でクリップボードへコピー。右クリックは貼り付け(改行や制御文字を含む内容は、送る前に確認)
  • 端末へのテキストのドラッグ&ドロップと、編集メニューの「ペースト」(Ctrl+Shift+V)を廃止
  • キープアライブとマクロは、接続先リストで機器を右クリック →「ツール」へ移動(未接続・接続先が違う項目では選べません)
  • タブを開いている機器は、名前と接続先(ホスト・ポート・プロトコル)の変更、削除ができません
  • 打ちかけの入力があるあいだは、キープアライブを送りません
  • SNMP の GET / WALK を途中で止められます(そこまでの結果を「途中まで」として表示・書き出し)
  • NetBelt を 2 つ同時に起動できなくなりました(2 つ目は動いている窓を前に出して終了)
  • 保存されたパスワードを復号できない機器へは接続しません(起動時にも知らせます)
  • known_hosts に読めない行があり、名前欄がその機器の接続先と完全に一致するときは、その機器への接続を断ります(ワイルドカードの行やハッシュ化した名前の壊れた行は照合せず、警告だけ出して接続します)。保存済みと違う鍵が来たときは上書きせず中止します
  • SFTP クライアント: 上書きの確認を経ていない送信は既存ファイルを置き換えません。同じ保存先への二重ダウンロードを断ります。リンクの権限変更はリンク先の現在値を初期値にします
  • 内蔵 FTP / TFTP / SFTP サーバ: 同じ名前へ同時にアップロードされたときは、後から来た方を断ります
  • 同じ名前の共通マクロ(プリセット)が複数あるときは、その名前のマクロの実行・編集・削除を断ります(起動時にも知らせます)
  • 自動更新: インストール先を排他してから書き換え、展開の直前に ZIP のハッシュを照合します
  • ログ記録中のダイアログは、アプリが書いたバイト数を表示します(記録の開始・停止のメッセージは廃止)

修正

端末・ログ

  • 長い出力の途中で上へスクロールしても、一番下へ戻されていた
  • show tech-support のような大量出力で端末が固まっていた
  • 画面消去や行の挿入・削除を含む出力で、数秒〜十数秒固まることがあった
  • 受信が描画より速いと、描いていない分が際限なく溜まっていた
  • コピーと全ログ保存で、無関係な行が 1 行に繋がる・1 行が 2 行に割れることがあった
  • 窓の大きさや文字サイズを変えると、受信済みの文字が消えることがあった
  • 更新のために終了すると、記録中のログが閉じられず受信分が失われていた
  • 閉じている途中に、更新の知らせなどのダイアログが開くことがあった
  • 大きな貼り付けの送信が、長さに対して極端に遅くなっていた
  • SSH / Telnet で、受け取りの遅い機器へ大きく貼り付けると、途中でセッションが切れていた

接続・設定

  • 起動時に Default グループを補う保存が、Windows では必ず失敗していた
  • 設定ファイルの一部が壊れているだけで、設定全体が初期状態に戻っていた
  • 同じ名前の機器が 2 台あると、編集・削除・移動で別の 1 台が書き換わる・消えることがあった
  • グループの変更が保存に失敗しても、終了時に保存されていた
  • NetBelt を 2 つ起動していると、known_hosts の保存がぶつかって鍵が残らないことがあった
  • known_hosts にハッシュ化した名前の壊れた行が 1 行あるだけで、どの機器にも接続できなくなっていた
  • 設定のポート番号が文字列("22" など)だと、SSH で保存済みのホスト鍵と照合されず、別の鍵を受け入れていた(Telnet は繋がらなかった)
  • 同じ名前の機器が別のグループにあると、接続した機器とは別のグループの自動実行コマンドを送っていた
  • 同じ名前の共通マクロが複数あると、選んだものと別のマクロが送られる・まとめて削除されることがあった
  • コンソール接続のボーレート変更をポートが拒んでも、表示と再接続用の設定が戻らなかった

内蔵サーバ

  • TFTP: 機器が転送を打ち切っても再送を続けていた
  • Syslog(TCP): 終端の無い最後の 1 行が届かないことがあった。保持件数の設定が壊れていると受信できなかった
  • FTP: アップロードの進捗が出ていなかった。終わった転送の名前で進捗が出ることがあった
  • FTP / SFTP: 同じ名前へ同時にアップロードされると、どちらも成功と出るのに中身が混ざっていた
  • TFTP: 大きさ(tsize)が極端な要求で画面にエラーが出ていた。停止の待ち時間が転送の本数ぶん長くなっていた
  • Syslog とサーバのログ: 書き出したテキストで、特殊な改行文字によって 1 行が割れることがあった

SNMP・MIB

  • 別ベンダーの MIB にある同名の定義を親として借りて、Trap に他社の名前が付くことがあった(一部の形は未対応)
  • IMPORTS などの語が定義の名前として登録されることがあった
  • BOM 付きで連結した MIB で、モジュールの境目を取り違えていた
  • mibs フォルダのファイルが読めない・消えたときに、MIB を 1 件も読み込めないことがあった
  • 書き出した CSV に対象ホストが入っていなかった

SFTP クライアント

  • 置き換えに失敗したとき、最終名も一時名も機器から消えることがあった
  • 時間切れや切断のあとも「接続中」の表示が残っていた。同じ知らせが 2 回出ることがあった
  • リンクを確かめている最中に SFTP が切れると、「接続中」のまま残っていた

自動更新

  • インストール先へ書き込めないときに「別の更新が進行中です」と出ていた
  • 更新の残骸(適用用の写し・控え・一時名の実行ファイル)が片付かず溜まっていた
  • 2 つの NetBelt が同じ更新を保存すると、「ダウンロード完了」と出たのに適用できないことがあった
  • TEMP のパスに [ ] があると、更新が毎回失敗していた(1.3.0 以前からの更新では、その 1 回だけ手で入れ替えが必要です。README を参照)

1.2.0 以前から更新する場合は、更新を当てるのが旧版の updater.bat のため、
途中で英語のエラーが出ることがあります。詳しくは README の自動更新の項を
参照してください(NetBelt を終了してから当ててください)。


NetBelt ポータブル版

📄 ライセンスと対応するソースコード

NetBelt は GNU General Public License v3.0 で配布しています。

この実行ファイルには PyQt6 (GPL-3.0)、Qt (LGPL-3.0)、paramiko (LGPL-2.1-or-later)
などが組み込まれています。この実行ファイルに対応するソースコードは、
本リリースに自動添付される Source code アーカイブ、および
https://github.com/gomanizm/NetBelt のタグ v1.3.1 で入手できます。
ビルドは同梱の requirements.txt(バージョン固定済み)と NetBelt.spec、
Python 3.11 で再現できます。

組み込まれた第三者パッケージの一覧・ライセンス本文・配布元は、
ZIP 内の THIRD-PARTY-NOTICES.txt を参照してください。

📦 パッケージ内容

  • NetBelt.exe - アプリケーション本体
  • updater.bat - 自動更新が使うスクリプト(削除しないでください)
  • README.txt - 使い方ガイド
  • LICENSE.txt - NetBelt のライセンス(GPL-3.0)
  • THIRD-PARTY-NOTICES.txt - 同梱した第三者パッケージのライセンス表示
  • CHANGELOG.txt - この版で変わったこと
  • mibs/ - MIB ファイルの配置先(既定では空。README を参照)

ZIP のチェックサムは ZIP の中ではなく、本リリースに別添えの
NetBelt-v1.3.1-Windows-Portable.zip.sha256 です。自動更新がダウンロード後に
照合し、一致しなければ更新を中止します(破損の検知が目的で、GitHub 自体が
侵害された場合の改ざんは検知できません)。

🚀 インストール方法

  1. ZIPファイルをダウンロード
  2. 任意のフォルダに展開
  3. NetBelt.exe をダブルクリックして起動

💻 動作環境

  • Windows 10 / Windows 11 (64bit)
  • Pythonのインストールは不要
  • すべての依存ファイルが含まれています

✨ 主な機能

  • SSH、Telnet、シリアル接続に対応
  • デバイス管理とグループ化
  • マクロ機能
  • SNMP Trap / Syslog 受信(カスタムMIB対応)
  • SFTP ファイル転送

📝 初回起動

  • 初回起動時に config.json が自動生成されます
  • MIB ファイルは同梱していません。mibs/README.md の手順で配置してください

詳しい使い方は README.md をご覧ください。

v1.3.0

Choose a tag to compare

@github-actions github-actions released this 17 Sep 11:04
01fa8a2

v1.3.0 で変わったこと

コード全体を対象にした外部レビューを 3 回(104 件、76 件、6 件)行い、
見つかった不具合をすべて直しました。3 回目のレビューで影響の小さかった
7 件は、直すと壊す危険のほうが大きいと判断してそのままにしています
(残る制限としてコードに記録しました)。

4 回目のレビューでは、3 回目の修正そのものが持ち込んだ不具合が 2 件
見つかりました(下の「重い不具合」の 1 つ目と 2 つ目)。

1.2.0 から更新する場合は、この節の最後にある「8 月 28 日までに入っていた
変更」の冒頭も読んでください。ファイアウォールの扱いが変わっています。

変更

  • コンソール接続のボーレートを変えると、開いているタブにその場で効く
    ようになりました。
    機器側で speed 115200 などを実行したあと、
    機器一覧の右クリックからボーレートを合わせれば、タブを閉じて繋ぎ直さずに
    そのまま操作を続けられます。接続もさかのぼれる履歴もそのままです。
    アダプタがその速度に対応していないなどで変更できなかったときは、
    接続を元のボーレートのまま残し、ステータスバーでお知らせします。

修正(重い不具合)

  • 同じ名前の機器が別のグループにあると、接続した機器に別グループの
    自動実行コマンドが送られていた。
    所属の判定を機器名だけで行っていた
    ためです。機器名は全グループを通して一意になり、重複する名前の追加・
    複製・改名は理由を示して断ります。既に重複している設定は、片方の
    名前を変えてください。

  • 切断したあともマクロが止まらず、同じ名前で再接続した先へ残りの
    コマンドが送られていた。
    キープアライブも同じです。切断で止めます。
    接続直後に予約される自動実行コマンドも、待っている間に切断・再接続
    されていたら始めません。再接続後もキープアライブは自動では再開
    しないので、必要ならマクロダイアログから入れ直してください。

  • 機器を編集して保存に失敗すると、登録が消える/新旧 2 件になる
    ことがあった。
    削除と追加の 2 回に分けて保存していたためです。
    1 回の保存で差し替え、失敗したら何も変えません。

  • SFTP で機器を切り替えた直後、前の機器の一覧が残っていた。 その
    間に削除を承認すると、新しい機器の同名ファイルを消していました。
    切り替えた時点で一覧を空にします。

  • SFTP の右クリックメニューを開いている間にディレクトリが変わると、
    別の場所のファイルを操作していた。
    メニューを開いた時点の機器と
    場所に固定します。

  • SFTP の転送が失敗すると、既存のファイルが 0 バイトや途中までの
    内容に置き換わっていた。
    ダウンロードもアップロードも一時的な名前へ
    転送し、成功してから置き換えます。ダウンロードは失敗しても元の
    ファイルが残ります。アップロードは、途中までの内容が本来の名前で
    残ることは無くなりました(置き換えに失敗した場合は、転送済みの内容が
    機器側の一時名 .<名前>.netbelt-part に残り、その名前を表示します。
    切断時も同じ名前の一時ファイルが機器側に残ることがあります)。
    新規作成が許されず上書きだけ許されるディレクトリでは、一時名を作れない
    ため転送できなくなります。

  • ログ記録の書き込みに失敗しても「記録中」のままだった。 ディスク
    満杯や共有フォルダの切断で起きます。記録を止めて警告を出します。
    記録は失敗する前の行までです。

  • SSH の既知ホスト鍵ファイル(known_hosts)を読めないとき、黙って
    検証なしで接続していた。
    鍵が変わった機器にも気づかずにパスワードを
    送る状態でした。読めない場合は接続を中止し(壊れた行が 1 つある
    だけでも読めなくなります。該当行の修正・削除かファイルの退避を案内
    します)、新しい鍵を保存できない場合は画面に警告を出します。

  • FTP サーバのユーザー名に anonymous を使うと、任意のパスワードで
    全権限のログインが通っていた。
    ライブラリがこの名前を匿名として
    特別扱いするためです。通常ユーザーとしては登録できなくします。
    匿名を使う場合は「匿名を許可」を使ってください。

  • TFTP のアップロードで、保存の最後の書き込みが失敗しても「成功」と
    返していた。
    ファイルを閉じてから応答するようにし、失敗したら機器へ
    エラーを返して記録に残します。

  • SFTP サーバで、リンク(ジャンクション)を削除・改名するとリンク先の
    本体が消えたり改名されたりしていた。
    リンク自体に作用します。
    あわせて、ルートそのものや ./.. で終わるパスの削除・改名は断ります。

  • SNMP の結果を保存するとき、対象ホストに保存時の入力欄の値を書いて
    いた。
    取得したあとにホストを書き換えて保存すると別の機器の記録に
    なっていました。取得したときのホストを書きます。「既に操作が実行中
    です」で断られた要求のホストは記録しません。

  • SNMPv3 の Trap 受信で、登録したユーザより弱いセキュリティレベルの
    通知を受け入れていた。
    authPriv で登録したユーザ名に、鍵を付けない
    通知が届いていました。登録したレベル未満は捨て、一度だけ知らせます。

  • アプリが、操作と関係のない場所で突然落ちることがあった。
    SNMP の受信スレッドからの通知を中継する書き方に誤りがあり、
    通知の届け先が片付けられたあとも配送待ちが残っていました。
    そのあとで画面が何かを処理した瞬間に、解放済みの領域へ届きます。
    落ちる場所が毎回変わるのはこのためです。中継の書き方を直しました。
    一覧の内部データが表示より先に片付けられる経路も塞いでいます。

  • FTP サーバの停止を、待ち受けとは別のスレッドから行っていた。
    ライブラリが想定していない使い方で、停止の直後に待ち受け側が
    エラーを出していました。あわせて、サーバが待ち受けの仕組みを
    プロセス全体で共有していたのをサーバごとに分けました。

  • SFTP サーバで、公開したフォルダの外にあるファイルを削除・改名
    できた。
    C:名前 のようなドライブ付きの名前を送られると、Windows の
    パス結合が公開フォルダ側を捨てるためです。届く先はアプリを置いた
    フォルダ(設定ファイルやホスト鍵の場所)でした。この形の名前は
    受け付けません。

  • SFTP でファイルを送ったとき、置き換えの応答が返ってこないと、
    送ったファイルと元のファイルの両方が消えることがあった。
    機器側では
    置き換えが済んでいるのに、応答だけ期限切れになった場合です。後片付けが
    置き換わったばかりのファイルを消していました。期限切れのときは
    どちらの名前にも触れず、機器側で確かめる一時名をお知らせします。

  • 自動更新が、アプリの隣にある backup_netbelt_* という名前の
    フォルダを、確認も通知もなく削除していた。
    NetBelt はこの名前の
    フォルダを作りません。つまりその名前があれば利用者が置いたもので、
    機器のコンフィグの退避先かもしれません。更新スクリプトは、アプリの
    隣にあるフォルダを名前にかかわらず削除しません。

  • SNMP の結果や Trap の保存先に、端末がログ記録中のファイルを選ぶと、
    記録済みの内容が消えた。
    端末どうしの上書きは防いでいましたが、その
    検査を SNMP の書き出しが通っていませんでした。記録中のファイルが
    選ばれたら、どの機器が使っているかを示して断ります。

  • 未適用の更新ファイルを調べている最中にそのファイルが消えると、
    アプリが起動しなかった。
    NetBelt を二重に起動していて、片方が更新を
    適用し終えた瞬間などに起きます。調べられなかった候補は飛ばして起動を
    続けます。

修正(細かい不具合)

  • 接続先リストの「切断」ボタンを押しても何も起きなかった。 押した機器を
    切断します。タブは開いたままなので、そのまま再接続できます。
  • ツール領域を境界のドラッグで幅ゼロまで畳むと、表示ボタンでも戻せなく
    なっていた。
    戻せるようにしました。「表示/非表示」で隠したときは、
    これまでどおり隠す前の幅に戻ります。
  • タブをドラッグして並べ替えている途中で下へ引き剥がすと、掴んでいない
    タブが切り離されることがあった。
    掴んでいるタブが切り離されます。
  • SFTP サーバを開始した直後にアプリを閉じると、サーバが止まらないことが
    あった。
    待ち受けのスレッドが動いていれば、待ち受けに入る前でも
    止めます。
  • 切断した接続や SFTP の抜け殻が、アプリを閉じるまで残っていた。
    切断のたびに解放します。SFTP に対応していない機器へ接続したときも
    残らなくなりました。
  • 画面消去(ESC[1J)で画面全体が消えるとき、消える前の内容が履歴に
    残らなかった。
    履歴へ送ってから消します。コピーやログ保存で
    失われなくなりました。
  • カーソル位置の保存と復元(DECSC/DECRC)で、文字セットの選択が戻らな
    かった。
    一緒に戻します。罫線を使う画面で崩れなくなります。
  • 代替画面へ入り直すと、前回の内容が消えていた。 47 での出入りでは
    内容を保ちます(1047 は仕様どおり、抜けるときに消します)。
    47 と 1047 では、入るときにカーソルもその場に残ります。
  • 消去命令(ED/EL)に定義の無い番号を渡されると、画面全体(EL なら
    行全体)を消していた。
    定義の無い番号は無視します。
  • Telnet で、大きすぎるサブネゴシエーションを捨てたあと、画面に何も
    出なくなることがあった。
    捨てる直前のデータが 1 バイトの IAC で
    終わっていると、続きの受信の先頭にある終端を見つけられず、以後
    受け取ったものを全部捨て続けていました。再接続するまで戻りません。
    その 1 バイトを持ち越して、終端を見つけられるようにしました。
  • GitHub のトークンが config.json に平文で保存されていた。 機器の
    パスワードと同じように暗号化します。
  • DPAPI: で始まるパスワードが、暗号化されずに平文で保存されていた。
    暗号化済みの値と同じ形に見えるためです。暗号化できるものは暗号化し、
    それでも見分けが付かない形(DPAPI: のあとが英数字だけなど)は、
    機器の登録画面で保存前に確認します。FTP/SFTP サーバのパスワード欄では
    確認は出ず、平文で保存したうえでサーバの開始を断ります。別の文字から
    始まるパスワードをお使いください。
  • SNMP の結果を CSV で保存すると、Excel で文字化けしていた。 BOM を
    付けて保存します。
  • SFTP のパーミッション変更ダイアログが、setuid・setgid・スティッキー
    ビットを黙って落としていた。
    保ちます。
  • 2GiB を超える転送で、FTP と TFTP の進捗表示が壊れていた。 正しく
    表示します。
  • Syslog で、CRLF が受信の切れ目にまたがると 1 行として数えられず、
    行の長さ制限に早く当たっていた。
    またがっても正しく数えます。
  • Syslog サーバの停止が、TCP の接続を処理しているスレッドを待たずに
    完了と表示していた。
    待ってから知らせます。
  • SFTP サーバが、サイズや更新時刻の変更要求に「成功」と答えるだけで何も
    していなかった。
    実際に適用します。
  • 実行ファイルの置き場所の名前に %環境変数% が含まれると、
    ファイアウォールの許可登録が展開後の別のパスに対して行われていた。

    管理者で実行していないときだけ起きます。パスに % が含まれる場合は、
    展開されるかどうかに関わらず登録せず、理由を知らせます(管理者で
    実行しているときはこれまでどおり登録します)。
  • README のファイアウォールの説明が、起動時に自動で許可を追加すると
    読めた。
    実際には各パネルの「ファイアウォールで許可」を押したときだけ
    追加します。説明を実際の動作に合わせました。
  • FTP の転送が途中で切れても、履歴の行が「転送中」のまま残っていた。
    「中断」と表示します。
  • 更新のダウンロードが、リリースに添付された別の zip を掴むことが
    あった。
    配布物の名前で選びます。
  • 更新の途中で中断した残骸があると、実行ファイルを含まない zip でも
    「更新完了」と表示し、動いている実行ファイルを壊していた。
    残骸を
    新しい実行ファイルと取り違えないようにしました。
  • 更新の作業場所の名前が、同じころに始まった別の処理とぶつかって
    いた。
    名前を %RANDOM% 任せにしていましたが、この値は処理の
    開始時刻から作られるため、同じ秒に始まると同じ番号を引きます。
    作業場所を 1 つずつ確保し、終わったら丸ごと片付けます。
  • 失敗した更新の残骸が一時フォルダに溜まり、次の更新で中身が
    紛れ込むことがあった。
    残骸と同じ名前を引くと、作業場所を
    作れないまま処理が進み、残骸のファイルも一緒にインストール先へ
    コピーされていました。しかも「更新完了」と表示されます。

修正(端末の表示と記録)

  • 画面の一部だけを使うスクロール領域の指定で、下端に 0 を書かれると
    狭い領域が残ったままになっていた。
    0 は「既定値」の意味なので、
    画面いっぱいに戻します。

  • 端末のリセット(RIS)で、画面に出ていた内容が履歴に残らず消えて
    いた。
    画面消去(ED 2)と同じように履歴へ送ってから消します。

  • 折り返しの印が行を書き直しても残り、履歴やログで別々の行が
    つながって見えることがあった。
    その行に文字を書いた時点で外します。

  • 画面を広げたあと、行の途中に文字を差し込むと行末の文字が
    消えていた。
    桁数に余裕があるかを見てから押し出します。

  • 端末が解釈しない制御シーケンスを、途中まで一致しただけで既知の
    命令として実行していた。
    画面が突然消えたり代替画面へ切り替わったり
    する原因でした。解釈しないものは無視します。

  • 全角文字・結合文字・絵文字を 1 桁として数えていたため、機器側の
    桁揃えが崩れていた。
    全角は 2 桁、結合文字と幅ゼロの文字は 0 桁と
    して数えます。カーソルの表示位置も桁ではなく画面のセルで数えます。
    曖昧幅の文字は 1 桁のまま、絵文字の合字は分けて数える、幅ゼロの
    文字が行頭に来たときは捨てる、という制限は残ります。

  • マクロとキープアライブの送信が、貼り付け中のかたまりの間に
    割り込んでいた。
    端末の送信待ち行列を通すようにしました。

  • 記録中のファイルを、別のタブの記録や「全ログ保存」が上書きして
    いた。
    使用中のファイルは、どの機器が使っているかを示して断ります。

  • 「全ログ保存」を取り消したり失敗したりすると、選んだ既存ファイルが
    空になっていた。
    一時ファイルへ書き切ってから置き換えます。
    取り消したときは保存先に触れません。

  • 実行中のコマンドリストを止める方法が画面に無かった。 実行中は
    右クリックメニューに「マクロ停止」が出ます。

  • 端末の表示内容に上限が無く、長時間つないだままだとメモリを
    使い続けていた。
    表示は 20000 行までにし、元に戻す履歴も持ちません。
    「全ログ保存」は画面に残っている分を保存するので、上限を超えた
    ぶんは保存できません。保存するときにその旨を知らせます。全部を
    残したい場合は「ログ記録」を使ってください。

  • タブを閉じても端末が解放されず、閉じるたびにメモリが増えていた。
    閉じた時点で解放します。

  • 「全ログ保存」の進捗ダイアログを Esc や × で閉じても、保存処理が
    裏で走り続けていた。
    閉じると止まります。

  • 切断したタブへ機器ツリーから接続し直すと、キーボード入力を
    受け付けないことがあった。
    Enter での再接続では起きず、接続や
    ダブルクリックでタブを使い回したときだけ再接続待ちの状態が
    残っていました。タブを作り直す時点と、再接続に失敗した時点の
    両方で解除します。

  • 作業フォルダに logs を作れないと、ログ保存のダイアログすら
    出なかった。
    ダイアログは必ず出し、作れない場合はホームフォルダを
    既定にします。

  • 表示できる行数の上限に達したあと端末の大きさを変えると、さかのぼれる
    履歴に同じ行の重複と抜けが積み上がった。
    画面を描き直す起点を、Qt が
    先頭の行を捨てたあとも古いまま使っていたためです。縦に 6 往復させると
    重複 443 行・断裂 12 か所になり、その内容がそのまま全ログ保存にも
    出ていました。

  • 上限で古い行が捨てられたあと画面を少し縮めるだけで、全ログ保存の
    「古いログは含まれません」という警告が出なくなった。
    行数がその時点で
    上限を下回るかどうかだけを見ていたためです。一度でも捨てたことを
    覚えておき、欠けたログを完全なものとして保存しません。

  • 改行のない出力を送り続けると、表示のメモリが上限に関係なく増え
    続けた。
    折り返した行を 1 つのかたまりとして連結していたため、
    行数の上限が効きませんでした。かたまりの長さにも上限を設けます。

  • マクロを止めても、送信待ちのコマンドが機器へ送られていた。
    「マクロ停止」はタイマーと管理情報を消すだけで、端末の送信列へ渡した
    ぶんはそのまま残っていました。停止で取り消します。

  • マクロの送信中に切断されると、内部で例外が出ていた。 送信が
    その場で失敗を通知し、後片付けが先に進むためです。

  • 稼働中のキープアライブの間隔が、実際の値にかかわらず「60 秒」と
    表示されていた。
    ダイアログが稼働状態しか受け取っていなかった
    ためです。10 秒で始めて開き直すと 60 秒と表示され、そのまま止めて
    始め直すと本当に 60 秒になっていました。

  • ログ記録の経過時間が 24 時間ごとに 0 へ戻っていた。

  • 全ログ保存の取り消しが、最後の書き込みのあとでは効かなかった。
    取り消しても保存先が置き換わっていました。

  • 全ログ保存の取り消しが、書き込みの終わりを画面を止めたまま待って
    いた。
    共有フォルダの切断などで戻らない場合、全タブの操作と受信表示が
    止まりました。待つ時間に上限を設け、越えたら状況をお知らせします。

  • ログファイルを閉じるのに失敗すると「記録中」の表示が残り、記録を
    始め直せなかった。

  • 記録中ダイアログと右クリックメニューが、閉じたあとも積み上がって
    いた。
    記録を 3 回始めて止めると 3 個、右クリック 5 回で 25 個の
    項目が残っていました。閉じた時点で破棄します。

  • 端末エミュレータの細かい取りこぼしを直しました。 全角文字の前半で
    画面を消すと履歴へ退避されない、画面先頭の行削除が履歴へ送られずに
    捨てられる、代替画面から戻ると文字集合が元に戻らない、カーソルの
    保存・復元で折り返し待ちが失われる、代替画面とメイン画面がカーソルの
    保存場所を共有していた、CSI E / F がスクロール範囲を越える、
    行の挿入・削除のあとカーソルが行頭へ戻らない、行頭までの消去で
    折り返し印が残る、自動折り返しを切っているとき結合文字が 1 つ左の
    文字に付く、代替画面へ入るときに不要なカーソル移動が起きる。

  • 文字の削除・挿入で行が空になっても、折り返しの印が残っていた。
    行頭までの消去では直していましたが、同じことが別の操作からも起きました。
    履歴とコピーで空行が次の行と繋がります。

  • 全角文字の後半桁にカーソルがある状態で「カーソルから画面末尾まで」を
    消すと、画面が空になるのに履歴へ退避されなかった。

  • マクロを止めたとき、送信中だった 1 行が途中までしか機器へ届かず、
    中途半端な文字列が入力行に残った。
    送信中の 1 行は送り切ってから
    止めます。

  • 右クリックメニューが、閉じたあとも画面の子として積み上がっていた。
    端末では直しましたが、機器一覧・SFTP・Syslog・メインウィンドウでも
    同じことが起きていました。

修正(接続・機器の登録・SFTP・SNMP)

  • 日本語の出力が受信の切れ目にまたがると、文字化けして表示されて
    いた。
    SSH・シリアル・Telnet のいずれも、続きが届くまで待ってから
    文字に直します。
  • 別の Windows アカウントや別の PC で作った設定を読むと、復号できない
    パスワードをそのまま FTP/SFTP サーバの認証情報として登録していた。

    暗号文のままログインが通る状態でした。復号できない場合はサーバを
    開始せず、パスワードの入れ直しを案内します。
  • シリアル接続を開いている最中に切断すると、COM ポートを掴んだまま
    残っていた。
    次の接続がアクセス拒否になり、再起動するまで直りません
    でした。開いたポートを閉じてから終わります。
  • シリアルの送信が画面を止めていた。 300 bps では 512 文字の
    貼り付けで約 17 秒固まっていました。送信は別スレッドで行います。
  • 機器名やホストが欠けた config.json を読むと、アプリが起動しなく
    なっていた。
    壊れた項目だけを外して起動し、控えを取った旨を知らせ
    ます。同じファイルの正常な機器はそのまま使えます。名前の無い
    グループは「(名前なし)」として表示し、グループとして読めない項目は
    外します。
  • 機器を編集すると、マクロや通信速度など画面に出ていない設定が
    消えていた。
    編集していない項目はそのまま残します。
  • 接続し直したあと、前の接続の切断・エラー通知が新しい接続の表示を
    書き換えていた。
    通知がどの接続のものかを見て、古いものは捨てます。
  • SSH 接続の直後、SFTP の準備が終わるまで画面が固まっていた。
    別スレッドで行い...
Read more

v1.2.0

Choose a tag to compare

@github-actions github-actions released this 27 Aug 06:03
e4d99c4

v1.2.0 で変わったこと

ターミナルの描画を作り直しました。これまでは受信した文字を書き足していく
だけで、行と桁からなる「画面」という概念を持っていませんでした。そのため
nano や vi が「23 行目の 1 桁目へ」と指示しても行き先が無く、画面ぶんの
描画がすべて同じ場所に重なっていました。

設定や接続先の作り直しは不要です。 これまでの config.json をそのまま
使えます。

追加

  • nano や vi の画面が崩れなくなった。 これまでは「対応していません」と
    案内を出すのが精一杯でした。タイトルバー・編集領域・下部のショートカット
    2 段が、実際の画面として組み上がります。less や top のような画面を
    作るコマンドも同じ仕組みで扱いますが、すべてのコマンドを試したわけでは
    ないため、崩れるものが残っている可能性はあります。
  • 全画面のコマンドの画面は、記録にも残ります。 nano や vi を閉じても
    開く前の画面は戻らず、編集中の画面がそのままスクロールバックと
    セッションログに残ります。NetBelt は端末種別を vt100 として接続するため、
    これらのコマンドが画面を退避する仕組み(代替画面)を使わないためです。
    編集内容を記録に残したくない場合は、ログ記録を止めてください
    (スクロールバックには残りますが、画面上だけでファイルには残りません)。
  • 色と装飾を表示するようになった。 文字色・背景色・太字・下線・反転に
    対応しました。基本 16 色に加えて 256 色パレットと RGB 直接指定も扱えます。
    反転表示は、設定した文字色と背景色を入れ替えて表示します。
  • ウィンドウの大きさを機器へ伝えるようになった。 これまでは 80×24 固定で、
    ウィンドウを広げても show の出力が 80 桁で折り返していました。接続時と
    リサイズ時に実際の行数・桁数を伝えます(RFC 4254 §6.2 / §6.7)。
    この通知は SSH のみです。Telnet とシリアルでは通知しませんが、
    画面の描画・色・折り返しはこれまでどおり同じように働きます。
  • アプリケーションが指定する入力方式に従うようになった。 nano が
    要求するカーソルキーの形式(DECCKM)と、bash のブラケットペーストに
    対応しました。貼り付けが 1 行ずつ実行されず、まとめて編集できます。
  • ステータスバーに端末の大きさを表示するようにした。 いま表示中の
    ターミナルの桁数と行数が右端に出ます(SSH ではこの値を機器へ伝えて
    います。Telnet とシリアルでは表示だけです)。
  • ターミナルのタブをドラッグで並べ替えられるようにした。
  • 接続先リストを隠せるようにした。 ツールエリアと同じく、仕切りを
    ドラッグする・右クリックする・表示メニューから切り替える、の 3 通りです。
  • 更新の通知に、何が変わったかを出すようにした。 これまでは使い方の
    案内しか出ておらず、更新して何が変わるのか分かりませんでした。
    何世代か飛ばしている場合は、その間のぶんもまとめて表示します
    (多すぎると読まれないため、5 世代までとし、残りは件数だけ添えます)。

修正

  • nano や vi を開くと画面が 1 行に潰れていた。 上の「追加」の
    とおり、画面として組み上がるようになりました。
  • ウィンドウを広げても、出力が 80 桁で折り返したままだった。
    端末の大きさを 80×24 に固定して機器へ伝えていたためです。

変更

  • 受信の解釈を、正規表現による逐次処理から仕様どおりの状態機械へ置き換え
    ました。受信がどこで途切れても解釈が変わりません。実機から採取した
    データを分割して検証しています(Linux 側の 3 種は全ての切れ目、
    機器から採った 7058 バイトは 7 バイトおき)。
  • 画面の大きさが変わったとき、すでに書かれた行は組み直しません(実端末と
    同じ挙動です)。狭い状態で出力された行は、その折り返しのまま残ります。
    ただし表示領域から流れて記録に入った行は 1 本の行として保存されるため、
    ウィンドウの幅に合わせて折り返し直されます。
  • 全画面アプリを検知して案内を出す仕組みを廃止しました。実際に表示できる
    ようになったため不要になりました。
  • 機器から端末への問い合わせ(カーソル位置・装置種別)に、自動で答える
    ようになりました。答えないと待ち続けるアプリケーションがあるためです。
    送るのは問い合わせへの応答だけで、こちらから何かを送ることはありません。
  • 端末の高さを機器へ伝えるようになったため、機器側のページャ(--More--)
    の区切りがウィンドウの高さで変わります。ウィンドウが高いほど一度に
    多く表示されます。
  • 全角文字は 1 桁として数えます。日本語を含む行の折り返し位置が、
    実際の見た目とずれることがあります。機器の出力は英数字が中心のため、
    影響は Linux 側での日本語編集に限られます。

開発メモ

作り直しは仕様から行っています。既存のターミナル実装のソースコードは
読んでいません(読んで書き直すと、構造や命名が似たときに派生物とみなされる
余地が残るため)。参照したのは Paul Williams の DEC 互換パーサ状態遷移図、
ECMA-48(= ISO/IEC 6429)、ISO/IEC 2022、RFC 4254、および標準に無い部分に
ついては XTerm Control Sequences です。


NetBelt ポータブル版

📄 ライセンスと対応するソースコード

NetBelt は GNU General Public License v3.0 で配布しています。

この実行ファイルには PyQt6 (GPL-3.0)、Qt (LGPL-3.0)、paramiko (LGPL-2.1-or-later)
などが組み込まれています。この実行ファイルに対応するソースコードは、
本リリースに自動添付される Source code アーカイブ、および
https://github.com/gomanizm/NetBelt のタグ v1.2.0 で入手できます。
ビルドは同梱の requirements.txt(バージョン固定済み)と NetBelt.spec、
Python 3.11 で再現できます。

組み込まれた第三者パッケージの一覧・ライセンス本文・配布元は、
ZIP 内の THIRD-PARTY-NOTICES.txt を参照してください。

📦 パッケージ内容

  • NetBelt.exe - アプリケーション本体
  • README.txt - 使い方ガイド
  • LICENSE.txt - NetBelt のライセンス(GPL-3.0)
  • THIRD-PARTY-NOTICES.txt - 同梱した第三者パッケージのライセンス表示
  • CHANGELOG.txt - この版で変わったこと
  • .sha256 - ZIP のチェックサム。自動更新がダウンロード後に照合し、
    一致しなければ更新を中止します(破損の検知が目的で、GitHub 自体が
    侵害された場合の改ざんは検知できません)
  • mibs/ - MIB ファイルの配置先(既定では空。README を参照)

🚀 インストール方法

  1. ZIPファイルをダウンロード
  2. 任意のフォルダに展開
  3. NetBelt.exe をダブルクリックして起動

💻 動作環境

  • Windows 10 / Windows 11 (64bit)
  • Pythonのインストールは不要
  • すべての依存ファイルが含まれています

✨ 主な機能

  • SSH、Telnet、シリアル接続に対応
  • デバイス管理とグループ化
  • マクロ機能
  • SNMP Trap / Syslog 受信(カスタムMIB対応)
  • SFTP ファイル転送

📝 初回起動

  • 初回起動時に config.json が自動生成されます
  • MIB ファイルは同梱していません。mibs/README.md の手順で配置してください

詳しい使い方は README.md をご覧ください。

v1.1.1

Choose a tag to compare

@github-actions github-actions released this 26 Aug 18:20
0da4418

NetBelt ポータブル版

📄 ライセンスと対応するソースコード

NetBelt は GNU General Public License v3.0 で配布しています。

この実行ファイルには PyQt6 (GPL-3.0)、Qt (LGPL-3.0)、paramiko (LGPL-2.1-or-later)
などが組み込まれています。この実行ファイルに対応するソースコードは、
本リリースに自動添付される Source code アーカイブ、および
https://github.com/gomanizm/NetBelt のタグ v1.1.1 で入手できます。
ビルドは同梱の requirements.txt(バージョン固定済み)と NetBelt.spec、
Python 3.11 で再現できます。

組み込まれた第三者パッケージの一覧・ライセンス本文・配布元は、
ZIP 内の THIRD-PARTY-NOTICES.txt を参照してください。

📦 パッケージ内容

  • NetBelt.exe - アプリケーション本体
  • README.txt - 使い方ガイド
  • LICENSE.txt - NetBelt のライセンス(GPL-3.0)
  • THIRD-PARTY-NOTICES.txt - 同梱した第三者パッケージのライセンス表示
  • CHANGELOG.txt - この版で変わったこと
  • .sha256 - ZIP のチェックサム。自動更新がダウンロード後に照合し、
    一致しなければ更新を中止します(破損の検知が目的で、GitHub 自体が
    侵害された場合の改ざんは検知できません)
  • mibs/ - MIB ファイルの配置先(既定では空。README を参照)

🚀 インストール方法

  1. ZIPファイルをダウンロード
  2. 任意のフォルダに展開
  3. NetBelt.exe をダブルクリックして起動

💻 動作環境

  • Windows 10 / Windows 11 (64bit)
  • Pythonのインストールは不要
  • すべての依存ファイルが含まれています

✨ 主な機能

  • SSH、Telnet、シリアル接続に対応
  • デバイス管理とグループ化
  • マクロ機能
  • SNMP Trap / Syslog 受信(カスタムMIB対応)
  • SFTP ファイル転送

📝 初回起動

  • 初回起動時に config.json が自動生成されます
  • MIB ファイルは同梱していません。mibs/README.md の手順で配置してください

詳しい使い方は README.md をご覧ください。

v1.1.0

Choose a tag to compare

@github-actions github-actions released this 25 Aug 10:32

NetBelt ポータブル版

📄 ライセンスと対応するソースコード

NetBelt は GNU General Public License v3.0 で配布しています。

この実行ファイルには PyQt6 (GPL-3.0)、Qt (LGPL-3.0)、paramiko (LGPL-2.1-or-later)
などが組み込まれています。この実行ファイルに対応するソースコードは、
本リリースに自動添付される Source code アーカイブ、および
https://github.com/gomanizm/NetBelt のタグ v1.1.0 で入手できます。
ビルドは同梱の requirements.txt(バージョン固定済み)と NetBelt.spec、
Python 3.11 で再現できます。

組み込まれた第三者パッケージの一覧・ライセンス本文・配布元は、
ZIP 内の THIRD-PARTY-NOTICES.txt を参照してください。

📦 パッケージ内容

  • NetBelt.exe - アプリケーション本体
  • README.txt - 使い方ガイド
  • LICENSE.txt - NetBelt のライセンス(GPL-3.0)
  • THIRD-PARTY-NOTICES.txt - 同梱した第三者パッケージのライセンス表示
  • .sha256 - ZIP のチェックサム。自動更新がダウンロード後に照合し、
    一致しなければ更新を中止します(破損の検知が目的で、GitHub 自体が
    侵害された場合の改ざんは検知できません)
  • mibs/ - MIB ファイルの配置先(既定では空。README を参照)

🚀 インストール方法

  1. ZIPファイルをダウンロード
  2. 任意のフォルダに展開
  3. NetBelt.exe をダブルクリックして起動

💻 動作環境

  • Windows 10 / Windows 11 (64bit)
  • Pythonのインストールは不要
  • すべての依存ファイルが含まれています

✨ 主な機能

  • SSH、Telnet、シリアル接続に対応
  • デバイス管理とグループ化
  • マクロ機能
  • SNMP Trap / Syslog 受信(カスタムMIB対応)
  • SFTP ファイル転送

📝 初回起動

  • 初回起動時に config.json が自動生成されます
  • MIB ファイルは同梱していません。mibs/README.md の手順で配置してください

詳しい使い方は README.md をご覧ください。

v1.0.0

Choose a tag to compare

@github-actions github-actions released this 23 Aug 15:35

NetBelt ポータブル版

📄 ライセンスと対応するソースコード

NetBelt は GNU General Public License v3.0 で配布しています。

この実行ファイルには PyQt6 (GPL-3.0)、Qt (LGPL-3.0)、paramiko (LGPL-2.1-or-later)
などが組み込まれています。この実行ファイルに対応するソースコードは、
本リリースに自動添付される Source code アーカイブ、および
https://github.com/gomanizm/NetBelt のタグ v1.0.0 で入手できます。
ビルドは同梱の requirements.txt(バージョン固定済み)と NetBelt.spec、
Python 3.11 で再現できます。

組み込まれた第三者パッケージの一覧・ライセンス本文・配布元は、
ZIP 内の THIRD-PARTY-NOTICES.txt を参照してください。

📦 パッケージ内容

  • NetBelt.exe - アプリケーション本体
  • README.txt - 使い方ガイド
  • LICENSE.txt - NetBelt のライセンス(GPL-3.0)
  • THIRD-PARTY-NOTICES.txt - 同梱した第三者パッケージのライセンス表示
  • .sha256 - ZIP のチェックサム。自動更新がダウンロード後に照合し、
    一致しなければ更新を中止します(破損の検知が目的で、GitHub 自体が
    侵害された場合の改ざんは検知できません)
  • mibs/ - MIB ファイルの配置先(既定では空。README を参照)

🚀 インストール方法

  1. ZIPファイルをダウンロード
  2. 任意のフォルダに展開
  3. NetBelt.exe をダブルクリックして起動

💻 動作環境

  • Windows 10 / Windows 11 (64bit)
  • Pythonのインストールは不要
  • すべての依存ファイルが含まれています

✨ 主な機能

  • SSH、Telnet、シリアル接続に対応
  • デバイス管理とグループ化
  • マクロ機能
  • SNMP Trap / Syslog 受信(カスタムMIB対応)
  • SFTP ファイル転送

📝 初回起動

  • 初回起動時に config.json が自動生成されます
  • MIB ファイルは同梱していません。mibs/README.md の手順で配置してください

詳しい使い方は README.md をご覧ください。