twNetMap

AIによる分析機能を搭載したネットワーク構成図作成ツール。ネットワークをスキャンして自動的にマップを生成できる。TWSNMPシリーズプロジェクト。

View on GitHub

twNetMap

English

twNetMap インフォグラフィックス

スキャンしたデータからネットワークマップを自動生成する、AI搭載ネットワーク検出ツールです。Go、Wails v2、およびSvelteで構築されています。


主な機能

  1. アクティブ&パッシブネットワークスキャン
    • Pingチェック: ICMPを用いてホストの到達性を確認します(非特権UDP ping、OSネイティブコマンドへのフォールバック対応)。
    • ARPテーブル解析: ローカルシステムおよびアクティブなSNMPエージェントからIP-MACマッピングテーブルを自動的に抽出します。
    • ポートスキャン: 一般的なTCPポート(21, 22, 23, 25, 80, 110, 143, 161, 443, 3306, 3389, 5432, 8080, 9100)をスキャンします。スキャンの挙動はポートスキャンモードで設定可能です:
      • OFF(デフォルト): アクティブなポートスキャンは行いません。主要ポート(21, 22, 23, 25, 80, 110, 143, 443, 8080)へのバナー取得・TCP接続試行のみで開放を確認します。ファイアウォールでブロックされやすい環境に適しています。
      • 安全性重視: 1ホストあたりの同時接続数を2に制限し、スキャン間に100msのウェイトを設けてゆっくりスキャンします。
      • 高速: 高並行で全ポートを並列スキャンします(従来の動作)。
    • SNMPクエリ (v2c/v3): リモートエージェントに対してクエリを実行し、システム情報(sysNamesysDesc)、物理MACアドレス、およびLLDP(Link Layer Discovery Protocol)ネイバー情報を取得します。SNMP対応デバイスでは、ポートスキャンの代わりに tcpConnTable MIB(.1.3.6.1.2.1.6.13.1.1)からオープンなTCPポート情報を取得します。
    • サービスバナー取得: オープンポートに接続してSSH/FTPバナーをキャプチャし、HTMLレスポンスのタイトル等をパースしてクリーンアップします。
  2. AI駆動トポロジー推論
    • langchaingo を使用して、複数のLLMプロバイダー(OllamaOpenAIGoogle Gemini)と連携します。
    • デバイスタイプを標準カテゴリ(routerswitchwifimobilepcserverprinterunknown)に分類します。
    • LLDPトポロジー情報などの構造的推論を活用し、デバイス間のリンク関係を自動的に構築します。
    • フィードバックループ: ユーザーによる手動の編集(ノード情報の修正やリンクの削除)を履歴データとして保存し、次回のAIプロンプトに優先反映することで、推論の精度をユーザーの好みに適合させていきます。
  3. インタラクティブなネットワークマップ可視化
    • vis-network を使用して、マップを動的かつレスポンシブに描画します。
    • ユーザーは手動でノードやリンクの追加、編集、削除を行うことができます。
    • ノードのドラッグ&ドロップによるレイアウト調整や、自動再配置を実行可能です。
  4. 充実したデータエクスポート機能
    • 画像/ドキュメント: PNG、SVG、PDF
    • 図面: Draw.io (.drawio)
    • データ: JSON形式のマップデータ、JSON形式のスキャン生結果、CSV形式のノードリスト、Excelドキュメント (.xlsx)

インストール方法

GitHubリリースからのダウンロード

GitHub Releases ページから、ビルド済みのスタンドアロンバイナリをダウンロードしてインストールできます。

macOS版

Windows版

Linux版


操作方法

以下の手順でネットワークの検出とマップ生成を行います:

1. スキャン設定 (Scan Settings)

スキャン対象のIPアドレス範囲を設定します(192.168.1.0/24 のようなCIDR形式、192.168.1.1-192.168.1.50 のような範囲形式、またはカンマ区切りの複数ターゲット)。SNMPエージェントから情報を取得する場合は、SNMPの認証パラメータ(コミュニティ名やSNMP v3のユーザー名/パスワード)を設定します。また、ポートスキャンモード(OFF / 安全性重視 / 高速)を選択することで、TCPポートへの接触の積極性を調整できます。ファイアウォールでスキャンがブロックまたは検知されやすい環境では「OFF」または「安全性重視」の使用を推奨します。

Scan Settings

2. AI設定 (AI Settings)

トポロジー推論に使用するLLMプロバイダー(Google Gemini、OpenAI、またはローカルで動作する Ollama)を選択し、APIキーやモデルパラメータを設定します。このLLMは、デバイス間の隣接関係の分析やデバイスタイプの自動分類に使用されます。

AI Settings

3. ネットワーク検出とトポロジー生成

ネットワークスキャンを実行します。スキャン完了後、検出されたデバイス情報やLLDP等の情報をAIが分析し、スイッチやルーターなどの接続関係を推論してネットワークマップを自動生成します。

Network Map

4. マップの調整とエクスポート

生成されたマップは、vis-network の機能により、ドラッグ&ドロップでノードの位置を変更したり、手動でノードやリンクの追加、編集、削除を行うことができます。手動で行った編集内容はシステムに学習データとして記憶され、次回のAI推論の精度向上に役立ちます。また、デバイス情報をテーブル形式で確認したり、マップをPNG、SVG、PDF、CSV、Excel、Draw.ioファイル形式でエクスポートすることも可能です。

Node List

5. カスタムノードの追加

自動検出されなかったデバイスや、手動でエンドポイントをマップに追加したい場合は、ダッシュボード上の「+ ノード追加」ボタンをクリックします。IPアドレスまたはユニークID、表示ラベルを入力し、デバイス種別を選択して追加します。

カスタムノードの追加

6. ノード間の接続追加・編集・削除

手動でデバイス間にリンク(接続)を作成するには、ダッシュボード上の「+ ノード接続」ボタンをクリックします。接続元のノードと接続先のノードをドロップダウンリストから選択し、必要に応じてリンクのラベル(例:「10G, トランク, vpn」)や表示スタイルを設定して「接続追加」をクリックします。

また、Shiftキーを押しながらマップ上の2つのデバイスを順番にクリックすることでも、リンクの追加ダイアログを表示できます。

ノード間の接続追加

リンクの編集と削除

7. ネットワークマップのエクスポート

作成したマップや検出データを外部に保存するには、ダッシュボード上の「エクスポート」ボタンをクリックします。以下の多彩なフォーマットに対応しています:

ネットワークマップのエクスポート

8. ネットワークマップの自動再配置

マップ上のノードの配置を自動で整理するには、ダッシュボード上の「自動配置」ボタンをクリックします。以下のいずれかの再配置オプションを選択できます:

ネットワークマップの再配置

9. 配置モード(Layout Mode)

マップ画面の左上には「⚙️ 配置モード」パネルが常時表示されており、ノードの自動レイアウト方式をリアルタイムに切り替えることができます。

アイコン モード 説明
🌲 階層型 (Hierarchical) デバイスタイプに基づいてノードを階層状に自動配置します。ルーター・スイッチ・PCなどが上位から下位へ整理され、ネットワーク構造が把握しやすくなります。
⚛️ 力学モデル (Force-Directed) ノード間の引力・斥力をシミュレートし、接続関係に応じて自然な位置に自動配置します。複雑なトポロジーを視覚的に整理するのに適しています。
📌 固定配置 (Static) 自動レイアウトを無効にし、ユーザーが手動でドラッグして配置した位置を固定します。意図した通りのカスタムレイアウトを維持したい場合に使用します。

階層型または力学モデルを選択した場合、パネル下部に間隔(Spacing)スライダーが表示されます。このスライダーを調整することで、ノード間の距離(50px〜300px)を変更できます。

選択した配置モードと間隔の設定はブラウザの localStorage に保存されるため、次回アプリを起動した際にも引き継がれます。

10. マップのナビゲーションボタン

マップ画面の右上右下には、vis-network の組み込みナビゲーションボタンが表示されます。

右上:パン(スクロール)ボタン

ボタン 機能
マップを上にスクロール
マップを左にスクロール
マップを下にスクロール
マップを右にスクロール

右下:ズームボタン

ボタン 機能
🔍(中心円) マップ全体が画面に収まるように一括表示(フィット)
+ ズームイン
ズームアウト

キーボードショートカット: 矢印キー(↑←↓→)でマップをスクロール、+ / - キーでズーム操作も行えます。


データの保存場所

本アプリケーションのデータは、各OSのユーザー設定ディレクトリ内の twNetMap フォルダに保存されます。

デフォルトの保存先

保存されるファイル

保存場所の変更

アプリケーション起動時に -datadir パラメータを指定することで、データの保存場所を任意のディレクトリに変更できます。

./twNetMap -datadir /path/to/custom/dir

注意事項・セキュリティについて

[!WARNING] スキャンの許可について: 本ツールは、アクティブなネットワークスキャン(ICMP Ping、TCPポートスキャン、SNMPクエリ、サービスバナー取得など)を実行します。所有していないネットワークや、スキャンの明示的な許可を得ていないネットワーク・ホストに対して実行すると、セキュリティポリシー違反や法的問題に発展する可能性があります。必ずご自身が管理しているネットワーク、またはスキャンが許可されている対象にのみ実行してください。


技術スタック


プロジェクト構成


ビルド方法

mise を使用することで、必要なツールチェーン(Go、Node.js)のバージョン管理と、開発やビルドのタスク実行をすべて一括で簡単に行うことができます。

前提条件

ツールのセットアップ

.mise.toml で定義されている必要なバージョンの Go と Node.js をインストールします:

mise install

開発モードでの実行

ホットリロードを有効にして、デバッグモードでアプリケーションを起動します(Gitタグ情報からバージョンを自動的に取得して wails dev を実行します):

mise run dev

プロダクションビルドの作成

お使いのOS向けに、スタンドアロンのプロダクション実行可能バイナリをコンパイルします(フロントエンドアセットのビルドと、バージョンフラグを付与したGoバックエンドのビルドを自動的に実行します):

mise run build