- WhosthereはGo言語で書かれたローカルネットワーク探索ツールで、直感的な**ターミナルユーザーインターフェース(TUI)**を提供
- LAN内のデバイスを発見・探索し、ネットワーク構造を把握可能
- Linux、macOS、Windowsをサポート
- mDNSとSSDPスキャナー、そしてTCP/UDP接続試行を通じてARPキャッシュを埋め、デバイスを識別
- 管理者権限がなくてもARPキャッシュを活用してデバイス一覧を収集可能
- 検出されたデバイスには**OUI(Organizationally Unique Identifier)**の参照を通じてメーカー情報を表示
- Apache-2.0 License
主な機能
- Modern TUI: 探索されたデバイスを直感的にたどれるインターフェースを提供
- Fast & Concurrent: 複数の探索方式を同時に実行し、高速な結果を提供
- No Elevated Privileges Required: ユーザー権限のみで実行可能
- Device Enrichment: OUI参照によるメーカー情報の表示
- Integrated Port Scanner: 発見したホストのポートスキャン機能を搭載(許可されたデバイスのみスキャン推奨)
- Daemon Mode with HTTP API: バックグラウンド実行および外部ツールとの統合が可能
- Theming & Configuration: YAML設定ファイルを通じてテーマと動作方式をカスタマイズ可能
使い方
- TUI実行:
whosthere
- HTTP APIデーモンモード実行:
whosthere daemon --port 8080
GET /devices: 発見されたすべてのデバイス一覧を返す
GET /device/{ip}: 特定デバイスの詳細情報を返す
GET /health: 状態確認
1件のコメント
Hacker Newsのコメント
Goで書かれたLANディスカバリーTUIツールを作った。名前はWhosthereで、管理者権限なしでローカルネットワーク上のデバイスを探索できるよう設計されている
mDNS、SSDP、ARPキャッシュ、OUIルックアップなどを組み合わせてデバイスを見つけ、tviewベースの高速なキーボード中心UI、内蔵ポートスキャナー、HTTP APIデーモンモード、YAML設定ファイルをサポートする
Goとネットワーキングを同時に学ぶために作ったプロジェクトで、lazygit、k9s、diveのようなTUIアプリに着想を得た
Homebrewや
go installでインストールでき、LinuxとmacOSをサポートする自分のネットワークでの結果は以下の通り:
「nmapを覚えていない者は、それを下手に作り直す運命にある」という有名な言葉がある
ルート権限なしで
/24スキャンを10秒以内に終えるコマンド例を共有しているnmap公式ドキュメント参照
5年前に自分も同じアイデアで似たCLIツールを作ったが、名前まで同じで、「whosthere」のポーランド語版であるktotuだった
ktotuプロジェクトのリンク
今回の版ははるかに完成度が高く、Goを選んだのもよい判断だ。もしかしてAIでアイデアを生成したのか気になる
全体的によくできたツール。
-iオプションでスキャンするインターフェースを指定できるとよさそう。自分のノートPCでは最初のスキャンだけは正常で、その後はARPリクエストが見えなかった
インターフェース設定はYAMLファイルで可能で、今後はコマンドラインフラグでも調整できるようにする予定
名前を「whogoesthere」にしていたらもっと面白かったかもしれない
Go標準ライブラリではTUI関連機能が特別に充実しているのか気になる。最近の新しいTUIはみんなGoで書かれているように見える
名前を「Whose LAN is it anyway?」にしたらもっと気が利いていたかもしれない
見事な技術力だ。いよいよ本当にエンジニアの道に入った感じがする
ネットワークトラフィック自体は直接見られないが、こうしたツールなしで問題を診断しようとする人をよく見かける
実際にはnmap、wireshark、LLDP、CDPのようなツールが必須で、大規模ネットワークにはNetdiscoを勧める
最近の「モダンTUI」が、結局はTurbo Vision、Clipper、curses時代のレトロ感を再現しているのが興味深い
Tailscaleで試したか気になる。とても有用かもしれないが、TailscaleはまだmDNSをサポートしていない
関連イシューへのリンク