
Linux向け次世代GUIベースのWiFiおよびBluetoothアナライザ
Sparrow-WiFiは、Linux向けの2.4 GHzおよび5 GHz WiFi・Bluetoothスペクトル認識ツールです。WiFiスキャン、Bluetooth Low EnergyおよびClassicの検出、ソフトウェア定義無線スペクトル分析(HackRF、Ubertooth)、GPS追跡、FAA RemoteIDドローン検出、ドローン/ローバー搭載のリモート運用、およびElasticsearchまたはOpenSearchへのECS 8.17インデックス作成を単一のプラットフォームに統合しています。完全にPython 3で書かれています。
このプロジェクトは、単独または組み合わせて動作する4つのコンポーネントで構成されています:
| コンポーネント | インターフェース | 目的 |
|---|---|---|
| Sparrow-WiFi | PyQt5デスクトップGUI | WiFi/BTスキャン、スペクトル分析、送信元追跡、ウォードライビング |
| Sparrow Agent | ヘッドレスHTTPサーバー | リモートスキャン、ドローン/ローバー配備、サードパーティ統合 |
| Sparrow DroneID | Webベース(ブラウザ) | WiFiおよびBluetooth LE経由のFAA RemoteIDドローン検出 |
| Sparrow Elastic Bridge | ヘッドレスCLIサービス | WiFi/BT観測データのElasticsearch / OpenSearchへのECS 8.17インデックス作成 |
Sparrow AgentとSparrow DroneIDはJSON REST APIを公開しており、他のアプリケーションがスキャン結果を照会し、スキャンをトリガーし、ドローン検出を取得し、無線/ドローン認識を独自のワークフローに統合できるようにします。Elastic BridgeはエージェントのREST APIを利用し、同梱のKibanaダッシュボードとともにECS 8.17ドキュメントを送信します。
このリリースでは、前バージョンからの3つの重要な改善が含まれています:
/wireless/networks/<iface>にアクセスすると、以前のエージェントはN個の冗長なiw scan呼び出しを開始し、インターフェースごとのロックで直列化され、スキャン遅延がクライアント数倍に増加していました。現在は最初のリクエストが実際にスキャンを行う「リーダー」となり、同時リクエストはthreading.Eventで待機してリーダーの結果を共有します。また、ロック作成のTOCTOU修正とインターフェースごとのロックにおける例外安全性も含まれています。droneid.*名前空間付き)、およびマルチデバイス対応のレスポンシブWeb UIを含みます。以下のSparrow DroneIDセクションを参照してください。sparrow-elastic.pyブリッジはECS 8.17ドキュメント(以前はECS 1.5)を生成するように書き直され、Elasticsearch 8.xとOpenSearch 2.xの両方をサポートし、ILM/ISMライフサイクルポリシーとロールオーバー書き込みエイリアスを備えたコンポーザブルインデックステンプレートを自動的にブートストラップし、OUIベンダーエンリッチメントとルールベースのデバイス分類(オプションのFingerbankフィンガープリンティング付き)を実行し、4つの同梱Kibanaダッシュボードと6つのレガシー保持ビジュアライゼーションを提供します。レガシーECS 1.5ブリッジはlegacy/sparrow-elastic.pyに保持されています。Elasticsearch / OpenSearch統合を参照してください。オリジナルのSparrowアプリケーションは、inSSIDerやLinSSIDなどのツールに代わる包括的なGUIベースのソリューションを提供し、基本的なスキャンをはるかに超える機能を備えています:
sparrowwifiagent.py)iw scan出力
FAAが義務付けるRemote Identification(RemoteID)ブロードキャストをデコードする、スタンドアロンのWebベースのドローン検出・追跡システムです。Python HTTPサーバーとして動作し、ネットワーク上の任意のデバイスからアクセス可能なブラウザベースのUIを提供します。
設定のTAKタブでは、追跡中の各ドローン、そのオペレーター(または離陸)ポイント、破線のリンクライン、およびこの受信機をCursor-on-TargetとしてATAK、WinTAK、iTAK、またはTAK Serverへ送信します。同じネットワーク上のクライアントにはUDPマルチキャストを、TAK ServerにはTCP/TLSを選択してください。TAKデータパッケージ(.zip)をインポートすると、サーバー、トラストストア、登録を一度に設定できます。ドローンが消失するとTAKマップから削除されます。トランスポート、証明書、シンボル、タイミング、トラブルシューティングについてはsparrow-droneid/TAK_INTEGRATION.mdを参照してください。
Web UIは起動後、http://localhost:8097 で動作します。セットアップについては下記のインストールを、プログラムによるアクセスについてはAPIリファレンスを参照してください。
Slack webhookに加えて、Sparrow DroneIDは発火した各アラートを汎用的な外部アラート取り込みエンドポイントにPOSTできます。このチャネルはデフォルトで無効です。設定 → アラート → APIベースのアラート通知で構成します:
http://MY_API_HOST:PORT/API_ROOTAuthorization: Bearer ... ヘッダーで送信されます。保存後はUI上でマスクされますrule.category: "test"、シリアル TEST-0000)をPOSTするため、実際のドローンを待たずに受信側をエンドツーエンドで検証できますSparrow DroneIDは、設定されたルートURLに対して2つの呼び出しを行います:
| 動詞 | パス | 目的 |
|---|---|---|
POST | {root}/v1/alerts/verify | 認証情報の確認 — ボディは {"domain": "<configured>"}。受信側は成功時に 200 {"status":"ok"}、不正なトークン時には 401 を返す必要があります。 |
POST | {root}/v1/alerts | アラートの発火 — ボディは下記のJSONです。受信側は成功時に 201 {"alert_id":"..."} を返す必要があります。503 レスポンスは指数バックオフで再試行されます(3回)。4xx は再試行せずに中断します。200 {"status":"dropped"} は、上流でドメインが無効化されていることを示します。 |
どちらの呼び出しも Authorization: Bearer <token> と Content-Type: application/json を送信します。
{
"domain": "<configured>",
"alert": {
"message": "<human-readable text identical to the Slack body>",
"observer": {
"name": "<operator_name or 'Sparrow DroneID'>",
"type": "drone-sensor",
"geo": {"location": {"lat": 0.0, "lon": 0.0}}
},
"rule": {"name": "<alert type label>", "category": "drone_detection"},
"event": {
"severity": 40,
"category": "network",
"action": "new_drone"
},
"labels": {
"serial": "<drone serial>",
"vendor": "<resolved vendor>",
"ua_type": "<UA type display name>",
"alert_type": "new_drone | altitude_max | speed_max | signal_lost"
},
"source": {"geo": {"location": {"lat": 0.0, "lon": 0.0}}},
"details": {
"operator_id": "...", "registration_id": "...", "self_id_text": "...",
"mac_address": "...", "protocol": "...", "rssi": -68,
"range_m": 1234.5, "bearing_deg": 215.0, "bearing_cardinal": "SW",
"speed_mps": 5.2, "direction_deg": 240.0,
"altitude_m_agl": 42.0, "detail": "..."
}
}
}