Skip to content

v1.3.0

Choose a tag to compare

@github-actions github-actions released this 17 Sep 11:04
· 371 commits to main since this release
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 の準備が終わるまで画面が固まっていた。
    別スレッドで行います。タブを閉じたあとに準備が終わった場合は
    破棄します。切断にならない接続エラーのときも、閉じた接続を
    抱えた SFTP を破棄してパネルを空にします。

  • ポート確認の画面を開いたままアプリを閉じると、終了しなかった。
    一緒に閉じます。

  • 設定ダイアログで取り消しても、保存に失敗した内容が画面に残って
    いた。
    失敗したらメモリ上の設定も元に戻します。

  • 接続方法がコンソールのとき、ポート欄に数字以外があると「予期しない
    エラー」で落ちていた。
    コンソールではポート欄を使いません。

  • ホームタブの名前と同じ「ホーム」を機器名に付けられた。 その
    機器のタブは閉じられず、ログ保存・記録・マクロ設定もホームタブ
    扱いで断られていました。予約語として断ります。手で編集した設定や
    以前のバージョンで作った設定に入っている場合は、読み込み時に
    外して知らせます。

  • SFTP のアップロードで、上書き確認が古い一覧を見ていたため、
    確認なしに既存ファイルを置き換えることがあった。
    送信の直前に
    機器側を確認し、確認を取っていなければ送りません。

  • SFTP の通信が無反応になると、画面が固まったままになっていた。
    30 秒で打ち切り、何秒応答が無かったかを知らせて切断します。
    接続し直してください。

  • パーミッションを返さない機器の一覧が、1 件でも混ざると全部
    表示されなかった。
    不明として表示します。

  • ポート確認で、使用中のポートを「空いている」と表示することが
    あった。
    排他的な確保で試します。

  • ポート確認が netstat の行を文字の一致だけで拾っていたため、
    80 番を調べると 8080 番などが混ざっていた。
    番号とプロトコル、
    待ち受け状態を見て選びます。

  • SNMP の結果を保存するとき、ダイアログを開いている間に次の取得が
    終わると、内容と対象がずれて記録されていた。
    保存を選んだ時点の
    内容を書きます。

  • custom_mibs.json を書き換えても、MIB の変換結果が古いままだった。
    内容の変化と解析器の更新を見て作り直します。

  • MIB の定義の読み取りが、次の定義まで飲み込んで名前と OID を
    取り違えることがあった。
    定義の切れ目を正しく見ます。あわせて、
    名前や親名にハイフンを含む定義(mib-2 など標準 MIB のほとんどの
    親)を読めるようになりました。これまでは mib-2 が名前「2」に
    なり、その配下が丸ごと名前に変換できませんでした。

  • 同じ名前の定義が複数の MIB にあると、片方の OID しか残らなかった。
    モジュールごとに区別します。IMPORTS は読まないという制限は残ります。

  • 実行ファイルを別のフォルダから起動すると、mibs を読めず、
    起動した場所に mib_cache.json を作っていた。
    実行ファイルの
    置き場所を基準にします。

  • 名前を付けていないグループが複数あると、空のグループを削除した
    つもりで別のグループの機器まで消えた。
    どれも同じ「(名前なし)」
    として扱っていたためです。

  • 自動検出した COM ポートと登録済みの機器が同じ名前で並びうるため、
    別の機器のグループ自動コマンドがコンソールへ流れた。
    自動検出の
    項目には印を付け、グループの自動コマンドの対象から外します。

  • 機器の名前を変えても、接続とタブは古い名前のまま残っていた。
    その古い名前を別の機器に付け直すと、新しい機器へ送ったつもりの自動
    コマンドが前の接続へ飛びました。開いているタブや接続が持っている名前は、
    別の機器に使えません。

  • Enter による再接続に失敗すると、以後 Enter を押しても再接続できなく
    なった。
    画面には「Enter キーを押すと再接続します」と残ったままでした。
    待機は接続に成功した時点で解きます。

  • 自動検出した COM ポートのボーレートを変えても、開いているタブの
    再接続には反映されなかった。
    Enter での再接続だけ古い値のままでした。

  • グループの追加・削除で保存に失敗しても、画面と実行中の設定が
    食い違ったままだった。
    「失敗した」と案内した変更が、あとの保存で
    永続化されることがありました。

  • 共通マクロの追加・更新・削除は、保存に失敗してもメモリ上の内容が
    戻らなかった。
    取り消したはずのコマンドが実行される状態でした。

  • グループの devices が壊れている設定ファイルで、機器の追加が
    例外になった。
    読み込みの時点で整えます。

  • SSH の既知ホスト鍵(known_hosts)の保存で、保存済みの鍵を失うことが
    あった。
    書き込みが途中で失敗すると元のファイルが壊れ、同時に 2 つ
    保存すると片方が消えていました。一時ファイルへ書いてから差し替え、
    保存の直前に他が書いた鍵を取り込みます。

  • 古い保存先からの known_hosts の引き継ぎに失敗すると、黙って
    「未知のホスト」として扱っていた。
    失敗を知らせ、やり直せるように
    しました。

  • タブを閉じたあとに成立した SSH セッションが回収されなかった。
    接続が確立する前に閉じた場合です。後から成立した接続も閉じます。

  • シリアルポートを閉じるとき、送信スレッドがまだ書いている最中でも
    閉じていた。
    待ち時間を過ぎた場合です。後始末を送信側へ渡します。

  • Telnet の交渉応答だけ、送信の結果を確かめていなかった。 送りきれて
    いなくても気づかず、相手が応答を待ち続けることがありました。

  • SFTP の送信で使う一時名が固定だったため、前回の失敗で機器側に残った
    「唯一の完全な写し」を次の送信が上書きしていた。
    送信ごとに別の名前を
    使います。

  • SFTP で既存ファイルを置き換えると、元のアクセス権が失われていた。
    元の権限を引き継ぎます。

  • 上書きの確認を経ていない送信が、確認から置き換えまでの間に現れた
    同名のファイルを黙って潰していた。
    置き換える直前にもう一度確かめます。

  • ルート直下へ送ると、一時ファイルだけがホームディレクトリに作られて
    いた。
    ルート直下の一時名にします。

  • SFTP の応答が期限切れになっても、接続中のまま残る経路があった。
    以後の操作が毎回期限切れまで待たされました。使えない接続は畳みます。

  • ディレクトリを指すシンボリックリンクが、パネルから開けなかった。
    リンク先の種別で判断します。

  • 順番待ちの間に切断されたダウンロードが、空の一時ファイルを残して
    いた。

  • リモートの「親へ」が、名前にバックスラッシュを含むディレクトリで
    別の場所へ移動していた。
    リモートのパスは常に / 区切りとして
    扱います。

  • ポート確認で、netstat の実行に失敗しても「使用されていません」と
    表示していた。
    また、IPv6 だけで待ち受けているポートを見落として
    いました。

  • SNMP で、前の操作の結果が次の操作のホストの結果として記録されて
    いた。
    結果が画面へ届く前に次の要求を受け付けていたためです。

  • SNMP のエクスポートが、書き込みに失敗すると上書き先の既存ファイルを
    失っていた。
    6 つの保存経路すべてです。一時ファイルへ書いてから
    置き換えます。

  • Trap の受信時刻ではなく、画面が処理した時刻を表示・保存していた。

  • 保存先の拡張子が大文字(.CSV / .JSON)だと、形式を取り違えた
    まま「成功」と表示していた。

  • 標準 MIB の配下にある名前が一つも解決できなかった。 起点
    (iso / internet / mgmt / mib-2)が初期の辞書に無かったためです。

  • OBJECT-IDENTITY で定義された枝が抽出されず、その配下がまとめて
    解決できなかった。

  • 壊れた custom_mibs.json を読み込むと、その値が読み込みエラーの
    あとも残り、その OID の Trap が表に出なかった。

  • mibs/ フォルダの拡張子判定が大文字と小文字を区別していた。
    CASE.MIB のようなファイルが解析されませんでした。

  • 接続を捨てたあとに接続処理が始まると、その印が消えて接続が成立して
    いた。
    タブを閉じた直後に起きます。SSH では誰も持っていないセッションが
    機器側に残り、シリアルでは COM ポートを掴んだままになって、アプリを
    再起動するまで同じ機器へ繋げませんでした。

  • 順番待ちの間に切断された送信と一覧取得が、成功も失敗も知らせずに
    消えていた。
    利用者からは送れたのかどうか分かりませんでした。

  • ディレクトリを指すリンクを、パネルから削除できなかった。 リンクを
    ディレクトリとして扱うようにした副作用です。移動はリンク先、削除は
    リンク自身、と分けました。

  • SFTP の置き換えで、最後のやり直しの応答が期限切れになったときだけ、
    「失敗しました」と断定していた。
    実際は置き換わったかどうか
    分かりません。理由が空のまま終わることもありました。

  • 機器名として、一覧に出ている自動検出の COM ポート名を登録できた。
    あとでどちらかに繋ぐと、もう一方は実態と食い違う案内だけが出ました。

  • グループ名の重複で登録を断ったときに、機器一覧が作り直されていた。
    設定は何も変わっていないのに、畳んでいたグループが開き直り、選択も
    外れていました。

  • ポート確認で netstat や tasklist を起動できない環境では、結果が
    一切表示されなかった。
    「取得に失敗しました」という案内も出ません
    でした。

  • 標準 OID ツリーの起点がまだ足りず、experimental / security /
    snmpModules の配下が解決できなかった。
    標準の Trap 名
    (coldStart など)はここにぶら下がります。

  • SNMP のエクスポート先を他のプログラムが開いていると、原因の分からない
    保存失敗になっていた。
    どのファイルが使用中かを伝えます。

修正(サーバ機能・更新とビルド)

  • サーバの動作中でも公開フォルダを選び直せてしまった。 動作中は
    選べません。

  • TFTP が netascii 指定を無視して、そのまま転送していた。 改行を
    変換します。

  • TFTP の最後の応答が届かなかった機器が、再送しても何も返って
    こなかった。
    転送の終わりに少し待ち、再送に応えます。

  • TFTP のタイムアウト指定を受け取っても使っていなかった。 1〜255 秒
    の範囲で待ち時間と再送間隔に反映します。

  • SFTP サーバの停止中に届いた接続を、そのまま受け付けていた。
    停止中は閉じます。

  • SFTP サーバの公開フォルダにドライブ直下(D:\)を指定できなかった。
    指定できます。

  • Syslog の選んだ行を保存するとき、ダイアログを開いている間に新しい
    メッセージが届くと、別の行が保存されていた。
    選んだ時点の内容を
    保存します。

  • Syslog の書き出しに送信元アドレスやプロトコルが入っていなかった。
    別々の機器の行が、保存したあとで見分けられませんでした。テキストにも
    JSON にも「送信元 (プロトコル/ポート)」を入れます。受信した生の
    メッセージは JSON にのみ記録します。右クリックの「コピー」も
    同じ書式になりました。

  • UTF-8 として読めないメッセージが、代替の文字コードへ回らずに
    文字が落ちていた。
    読めない場合に latin-1 へ回します。

  • TCP の Syslog が、長さを前置きする形式(RFC 6587)を受け取れな
    かった。
    受け取れます。

  • RFC 5424 の構造化データを空白で切っていたため、引用符や括弧を
    含む値が壊れていた。
    括弧・引用符・エスケープを見て切ります。

  • TCP の Syslog に接続数の上限が無かった。 64 までにし、超えた分は
    断ります。

  • ファイアウォールの規則を名前の一致だけで「登録済み」と判断して
    いた。
    無効化された規則やブロック規則があると、通信できないのに
    登録済みと表示されていました。状態と動作を見て判断し、直せるものは
    直します。許可を要求したあと反映を確認できない場合は、成功にせず
    失敗として知らせます。日本語・英語以外の表示言語では netsh の
    出力を読めないため、これまでどおり名前の一致だけで判断します。
    各パネルの「ファイアウォールで許可」の結果に、理由も出るように
    なりました。

  • 更新後に再起動した実行ファイルが、Python の DLL を読めずに落ちる
    ことがあった。
    再起動時に環境変数を初期化します。

  • 更新のダウンロード中にダイアログを閉じると、約 10 秒固まったり
    異常終了したりしていた。
    すぐ閉じ、ダウンロードは裏で止めます。

  • 更新スクリプトが、利用者自身の backup_ で始まるフォルダまで
    消していた。
    中に 7 日以上前のファイルが 1 つでもあれば、当日の
    ファイルごとフォルダを削除していました。更新スクリプト自身が付ける
    名前(backup_netbelt_)に限り、フォルダ自身の日付で判断します。

  • 更新の途中で実行ファイルの差し替えが中断すると、壊れた実行ファイル
    が残っていた。
    別名で展開してから入れ替えます。失敗した場合は
    元の実行ファイルが残ります。

  • build.bat を別のフォルダから実行すると、そのフォルダの dist
    build を消していた。
    スクリプトのある場所を基準にします。

  • 起動時に「更新を適用しますか」に「はい」と答えても、アプリが
    終了せず更新に失敗していた。
    終了するようにしました。

  • ダウンロードしたファイルの名前がバージョンによらず同じで、
    別のバージョンの内容を適用することがあった。
    バージョンごとの
    名前にし、適用前に中身を照合します。同時に 2 つ受信すると同じ
    一時ファイルを奪い合って両方失敗し、検証済みのファイルまで
    消えていた問題も直しました。未適用のものが複数あるときは、
    いちばん新しいものを勧めます。

  • ソースコードから実行しているときも、実行ファイル向けの更新を
    適用しようとしていた。
    その場合は git pull を案内します。

  • Syslog の保存・エクスポートが、書き込みに失敗すると上書き先の
    既存ログを失っていた。
    一時ファイルへ書いてから置き換えます。

  • Syslog の本文に改行が入っていると、テキスト保存やコピーで別の機器の
    独立した記録に見える行を作れた。
    本文の改行はエスケープし、1 件が
    1 行になるようにします。

  • 日時の無い Syslog は、本文の先頭 4 語が日時とホスト名として食われて
    いた。
    画面・検索・保存から本文が落ちていました。日時の形を確かめて
    から取り込みます。

  • Syslog の保持件数の上限は、画面へ届く前に溜まっている分を制限して
    いなかった。
    短時間に大量に届くとキューが際限なく伸び、画面が長時間
    固まりました。待ち行列にも上限を設けます。

  • TCP で受けた Syslog の受信原文が、本文末尾の空白や改行を削ったものに
    なっていた。

  • TFTP で、タイムアウト以外の失敗のあと、同じ名前の転送の開始通知と
    次の失敗通知が出なくなった。
    内部の対応表から外れないためです。

  • TFTP の停止ボタンが、大きなファイルの netascii サイズ計算の間、
    画面ごと長時間固まった。
    停止の要求で計算を打ち切ります。

  • SFTP サーバの未認証の接続数に上限が無かった。 接続のたびにスレッドと
    セッションが際限なく積み上がりました。同時接続数(既定 32)と、
    バナー・認証の待ち時間に上限を設けます。

  • SFTP サーバの LSTAT が、リンク自身ではなくリンク先の情報を返して
    いた。

  • FTP / TFTP / SFTP パネルのアクティビティログと転送履歴に保持上限が
    無く、認証を通らない相手からでも際限なく増やせた。
    どちらも 1000 件
    までにします。

  • FTP / SFTP サーバのパスワードから、前後の空白が黙って取り除かれて
    いた。
    画面の表示と実際の資格情報が食い違っていました。

  • 同じポートに有効な許可規則と拒否規則が両方あると、ファイアウォールの
    修復を「問題なし」として飛ばしていた。
    実際には通信できない状態でした。

  • 改行を含む GitHub トークンが、例外のメッセージ経由でログと画面に
    そのまま出ていた。

  • 更新の一時フォルダを作れないだけで、アプリが起動できなくなって
    いた。

  • 更新の中止が、ダウンロードの読み取りが終わるまで画面を止めていた。

  • 更新を適用する直前に、ZIP の中身と版をもう一度確かめるようにした。
    確認ダイアログを閉じるまでの間に、ファイルが消えたり別の版へ差し替わったり
    しても、そのまま展開していました。

  • 実行ファイルを NetBelt.exe 以外の名前に変えて使っていると、更新が
    当たらないのに「成功」と表示し、身に覚えのない NetBelt.exe だけが
    増えていた。
    名前が違う場合は、何も展開せずに中止して理由を示します。

  • ネットワーク上の共有フォルダ(UNC パス)から build.bat を呼ぶと、
    呼び出し元の dist / build を削除することがあった。
    自分の
    フォルダへ移れなかった時点で止めます。

  • build.bat が、実行ファイルの有無だけを見て「ビルド成功」と表示して
    いた。
    古い実行ファイルが残っているだけでも成功に見えました。

  • Syslog の本文が「数字+空白」で始まると、RFC 5424 の書式と取り違えて
    本文の先頭が食われていた。
    日時の形を確かめてから振り分けます。

  • Syslog の保存先の拡張子が大文字(.JSON)だと、形式を取り違えたまま
    「成功」と表示していた。

  • Syslog の保存先に、端末が記録中のログを選べてしまった。
    どの機器が使っているかを示して断ります。

  • SFTP サーバの一覧に、リンク先を失ったリンクが出てこなかった。
    ディスク上には在って削除もできるのに、一覧からは消えていました。
    一覧はリンク自身の情報を返します。

  • build.bat で updater.bat のコピーに失敗したときだけ、画面には
    「ビルド失敗」と出るのに終了コードは 0 だった。

  • build.bat の日本語が文字化けし、ときどき行の一部がコマンドとして
    実行されていた。
    コードページを決めてから読み直すようにしました。

  • 同じ場所へ同時に更新を当てると、成功と表示した側が相手の
    実行ファイルを据えていた。
    差し替え用の一時名がインストール先で
    共通だったためです。もう一方には「旧版のままです」と、事実と違う案内が
    出ていました。一時名を実行ごとに分けます。

  • 更新ファイルを確かめてから展開するまでの数秒の間に、別の内容へ
    差し替えられると、そのまま適用されていた。
    確かめた実体そのものを
    渡すようにしました。

  • 起動できない実行ファイルに差し替わっても「更新が完了しました」と
    表示し、更新ファイルを消していた。
    起動を確かめ、できなければ
    更新ファイルを残して理由を示します。

  • 更新ファイルの控え(ハッシュと版)を保存できなくても「ダウンロード
    完了」と表示していた。
    そのままでは適用時に必ず拒否されます。
    控えまで揃ってから完了とし、揃わなければ書きかけを片付けます。

  • ダウンロードを中止しても、ハッシュを取りに行っている間だったときは
    中止されず、次の起動で「未適用の更新があります」と出ていた。

8 月 28 日までに入っていた変更

全サブシステムを対象に不具合を洗い出し、見つかったものを直しました。
利用者からの報告ではなく、テストが見ていない範囲を調べた結果です。

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

ファイアウォールの扱いが変わりました。 Syslog 受信・SFTP サーバ・
SNMP Trap 受信が、起動時に Windows ファイアウォールの受信許可を
自動で作るのをやめました(TFTP と FTP は以前からこの方式です)。

これまで使っていたポートは、そのまま受信できます。 自動作成された
ルールは消さずに残るためです。影響があるのは、更新後にはじめて使う
ポート
へ変えたときだけで、その場合は各パネルに増えた
「ファイアウォールで許可(管理者)」を一度押してください。

なお、これまでに作られたルールは NetBelt - Syslog (UDP/514) のように
ポート番号ごとに残っています。使っていないポートのものは、Windows の
「セキュリティが強化された Windows Defender ファイアウォール」から
削除できます。

追加

  • 匿名 FTP の「ログインの許可」と「書き込みの許可」を分けました。
    これまで「匿名を許可」にチェックを入れると、資格情報なしで上書き・
    削除・改名・フォルダ作成まで許していました。書き込みは別のチェック
    ボックスになり、許可した場合も機器がファイルを置くのに要る範囲だけに
    絞ります(削除・改名・フォルダ作成は含みません)。
  • Syslog・SFTP サーバ・SNMP の各パネルに「ファイアウォールで許可
    (管理者)」を足しました。
    受信できないときに押してください。
    押したときだけ管理者への昇格を求めます。これで 5 つのパネルすべてで
    同じ手順になります。
  • 受信した SNMP Trap の保持件数に上限を設けました。 既定は 1000 件で、
    config.json の settings.snmp.max_traps で変えられます。Syslog の
    メッセージ上限と同じ考え方です。

修正

  • SFTP の一覧を開いただけでアプリが落ちることがあった。 更新日時や
    サイズを返さないサーバがあり、その値をそのまま扱っていたためです。
    一覧の失敗では済まず、ターミナルのタブや起動中のサーバごと消えていました。
    値が無い場合は「不明」と表示します。
  • SFTP の操作が、別の機器へ飛ぶことがあった。 ファイル選択などの
    ダイアログを開いている間にタブを切り替えると、送り先が切り替えた先の
    機器になっていました。落ちない代わりに、送るつもりのないルータへ
    ファイルが置かれ、削除も同じ経路で起きます。操作を始めた機器と
    同じでなければ、取りやめるようにしました。同じ機器の中でも、
    ダイアログを開いている間に一覧の取得が終わると送り先の
    ディレクトリが変わっていました。操作を始めた時点のディレクトリ
    に対して実行します。画面に出ている一覧と操作の対象が一瞬でも
    食い違わないよう、一覧の反映と現在地の更新を同時に行います。
  • 設定の保存が途中で止まると、機器の登録がすべて消えていた。
    保存先のファイルを先に空にしてから書いていたためです。強制終了・
    シャットダウン・ディスク満杯のいずれでも起き、次回起動時の
    バックアップにも壊れた中身しか残りませんでした。書き上げてから
    差し替える方式に変え、失敗しても前の設定が残ります。
  • 日本語入力で確定した文字が、機器へ送られていなかった。 画面には
    出るのに機器は受け取っていない状態になり、さらに過去の出力を範囲選択
    したまま確定すると、その出力が確定文字で置き換わって元に戻りません
    でした。全ログ保存にもそのまま残っていました。
  • 出力がスクロールバックに残らないことがあった。 機器側のアプリが
    画面の一部だけを使う指定を出したあと、元へ戻す指定が受け付けられずに
    残り続けるためです。以後の出力が記録に入らなくなっていました。
  • ウィンドウを狭めた直後の出力に、覚えのない文字が混ざることがあった。
    狭める前にその行にあった文字が、折り返し位置へ差し込まれていました。
  • 絵文字などが 1 つ画面に出ると、以後の表示がずれ続けた。 行が繋がる、
    文字が欠ける、といった形で崩れ、直りませんでした。
  • 設定を貼り付けている間、ウィンドウが反応しなくなった。 1 文字ずつ
    送っていたためです。まとめて送るようにし、送っている間も画面が
    動きます。
  • コンソール接続が、一度エラーで切れると二度と繋がらなくなった。
    切断を検知したあともポートを掴んだままだったためで、アプリを再起動
    するまで「アクセスが拒否されました」になっていました。タブを閉じても
    直りませんでした。
  • Telnet の機器を「編集」で開くだけで、ポート番号が 23 に戻っていた。
    何も触らずに OK を押しただけで書き換わり、そのまま保存されます。
    ターミナルサーバや CML のように 2001 番以降を使う機器へ、以後
    繋がらなくなっていました。SSH の機器では起きないため気づきにくい
    不具合でした。
  • Telnet でネゴシエーションが分割して届くと、表示が崩れることがあった。
    制御用のバイトが画面へ漏れ、機器へ応答も返さないため、待つ実装の
    機器ではプロンプトが出ないままになっていました。ネゴシエーションの
    本文に特定のバイト並びがあると終端を見誤って本文が画面へ漏れる、
    大きすぎるものを読み飛ばしている最中に終端が分割して届くと以後の
    出力を全部捨て続ける、という 2 つの取りこぼしも直しました。
  • 認証は通るのにシェルが開かない機器で、接続が固まったままになった。
    待ち時間の上限が無く、失敗の表示も再接続の案内も出ないため、
    ボタンを押しても何も起きないように見えていました。
  • SSH の接続に失敗するたび、機器側のセッションが残っていた。
    パスワードを続けて打ち間違えると、機器の vty を一時的に埋めます。
  • ログ記録の停止が、別の機器のタブに効いていた。 2 台を同時に記録
    しているとき、片方のダイアログで停止を押すと、止まるのは表示中の
    もう一方でした。押した側は記録が続いたままダイアログだけ消えるため、
    止めたつもりの内容がディスクに残り続けていました。記録中のタブを
    閉じたときも、ファイルが開いたままでした。
  • エラーで落ちたとき、ウィンドウが消えるだけで何も残らなかった。
    記録用のログにも 1 バイトも残らないため、何が起きたのかを後から
    調べる手がかりがありませんでした。原因を記録したうえで内容と記録先を
    表示し、操作ひとつの失敗でアプリごと終わらせないようにしました。
    起動できないときの理由も、同じログに残ります。
  • ツールを別ウィンドウで開いたまま閉じると、アプリが終了しなかった。
    メインウィンドウは消えるのにプロセスが残っていました。
  • TFTP サーバが、要求の数だけ制限なく処理を起こしていた。 待ち受けが
    止まっても「起動中」と表示され続け、以後どの転送も成立しませんでした。
    同時に扱う転送数に上限を設け、超えた要求はその場で断ります。
  • FTP サーバや SFTP サーバを停止した直後にパネルやアプリを閉じると、
    落ちることがあった。
    停止の処理が待受スレッドの終了を待たずに
    戻っていたためで、まだ動いているスレッドからの通知が片付け済みの
    画面へ届いていました。終了を待ってから戻ります。SFTP サーバでは
    「開始」の直後に「停止」を押すと止まらないことがあったのと、接続した
    まま何も送らない相手がいると停止に相手の数だけ秒単位で固まっていた
    のも直しました。
  • 起動した直後にアプリを閉じると、落ちることがあった。 SNMP の
    MIB を裏で読み込んでいる最中にウィンドウが片付けられるためで、
    読み込みが終わるのを待ってから閉じます。
  • Syslog の TCP 受信で、改行を送らない相手がいるとメモリを使い続けた。
    1 行の長さに上限を設け、超えた接続は切って記録に残します。行の終端が
    CRLF でも LF でも、同じ長さまで受け付けます。
  • mibs/ に置いた MIB がほとんど名前に変換されなかった。 ファイルを
    またいだ参照が解決できず、現代の MIB が使うモジュール定義も読んで
    いなかったためです。説明文に「RFC 1234」のような参照や URL が
    書かれた定義も、まとめて読み飛ばしていました。Trap が運ぶ OID が
    数字のままになっていました。コメントアウトされた古い定義や、説明文の
    中に書かれた例を本物の定義として読んでしまい、別の名前が付いたり
    本物が消えたりする取り違えも直しました。
  • エクスポートした CSV が、表計算ソフトで開いた瞬間に数式として
    実行されることがあった。
    機器側で自由に書ける値がそのまま書き出されて
    いたためです。障害チケットや報告書へ回した先の端末で起きます。
  • 2GiB を超える転送で、進捗の表示が当てにならなかった。 2〜4GiB では
    バーが動かず、4GiB を超えると 5 分の 1 ほど進んだ時点で「100%」に
    達していました。完了したと誤解して転送中にアプリを閉じかねない
    状態でした。
  • 転送中に別のタブへ切り替えると、前の機器の進捗が残り続けた。
    接続先の表示は切り替わるのに、その下のバーは前の機器の途中経過を
    出したままでした。
  • 更新の適用が当たらないことがあった。 更新の途中で更新用スクリプトが
    自分自身を置き換えてしまい、そこから先が壊れていました。アプリだけ
    終了して更新が適用されない、という形になります。
  • インストール先のパスによっては、更新がまったく当たらなかった。
    パスにコンマや等号が含まれる場合で、アプリが終了するだけで何も
    起きませんでした。^ % & ! を含む場合は引用符では救えないため、
    理由を表示して中止します(! は一時フォルダ TEMP のパスに含まれる
    場合も同じで、以前は「TEMP の空きが無い」という見当違いの案内に
    なっていました)。
  • ダウンロードが途中で切れると、書きかけのファイルが残り続けた。
    掃除の対象にもならず、再試行しない限り消えませんでした。検証済みの
    ZIP の傍らに残るファイルも、あわせて片付けます。
  • GPL の対応ソースから作った NetBelt は、自動更新がまったく効かなかった。
    リリースに添付されるソースアーカイブでは、更新用スクリプトの改行
    コードが Windows のものにならないためです。core.autocrlf を無効に
    してクローンした場合も同じでした。

変更

  • Syslog 受信・SFTP サーバ・SNMP Trap 受信は、起動時に Windows
    ファイアウォールの受信許可を作らなくなりました。TFTP と FTP に
    揃えたもので、「受信開始」を押しただけで管理者への昇格を求めない
    ためです。これまでは待ち受けるたびにポート番号入りのルールが恒久
    登録され、停止しても消えずに溜まっていました。既に作られたルールは
    残るので、これまでのポートはそのまま受信できます。新しいポートで
    通らない場合は、各パネルのボタンで許可を足せます。
  • SNMP の WALK が途中で応答を失っても、そこまでに取れた行を表示する
    ようにしました。これまではエラーだけが出て、取得済みの行はすべて
    捨てられていました。全部ではないことが分かるよう、件数と中断の理由を
    画面に添え、txt / csv / json へ書き出したファイルにも同じ注意を
    残します(保存した結果が完走したものと区別できるように)。1 行も
    取れていない場合はこれまでどおりエラーです。
  • 匿名 FTP の書き込みは、既定では許可しません。これまで「匿名を許可」で
    運用していた設定は、書き込みを許可した状態のまま読み込みます
    (機器からのアップロードが更新後に止まらないようにするためです)。
  • SNMP Trap は既定で最新 1000 件までを保持します。それより古いものは
    順に捨てられます。これまでは上限が無く、受信を続けるほどメモリを
    使い続けていました。

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.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 をご覧ください。