
whosthere v0.8.3
ローカルエリアネットワーク発見ツール。Goで書かれたインタラクティブなターミナルユーザーインターフェース(TUI)付き。 直感的にLANを発見、探索、理解できます。 ノックノック…誰かいる? 🚪
Whosthere
Go で書かれた対話型ターミナルユーザーインターフェース(TUI)を備えたローカルエリアネットワーク発見ツールです。直感的な方法で LAN を発見、探索、理解できます。
Whosthere は mDNS と SSDP スキャナーを使用して、非特権かつ並行したスキャンを実行します。さらに、TCP/UDP 接続を試みて ARP 解決をトリガーすることでローカルサブネットをスイープし、ARP キャッシュ を読み取って LAN 上のデバイスを特定します。この手法は、昇格された権限を必要とせずに ARP キャッシュを構築します。発見されたすべてのデバイスは、OUI ルックアップによって、利用可能な場合に製造元が表示されるように拡張されます。
Whosthere は、ネットワーク管理者が誰もが問う「私のネットワークには誰がいる?」という質問に、親しみやすく直感的な方法で答えてくれます。

機能
- 対話型 TUI: 発見されたデバイスを直感的にナビゲートし探索できます。
- 高速かつ並行: 複数の発見方法を同時に活用します。
- 昇格された権限は不要: すべてユーザースペースで動作します。
- デバイスの拡張: OUI ルックアップを使用してデバイスの製造元を表示します。
- 統合ポートスキャナー: 発見されたホストに対するオプションのサービスディスカバリ(許可があるデバイスでのみスキャンしてください!)。
- デーモンモードと HTTP API: バックグラウンドで実行し、他のツールと連携できます。
- テーマ設定と構成: YAML 設定により外観と動作をカスタマイズできます。
インストール
Homebrew 経由 (brew 使用):
brew install whosthere
NixOS 上 (nix 使用):
nix profile install nixpkgs#whosthere
Arch Linux 上 (yay 使用):
yay -S whosthere-bin
お使いのパッケージマネージャーがリストにない場合は、Go を使用していつでもインストールできます:
go install github.com/ramonvermeulen/whosthere@latest
または ソースからビルド:
git clone https://github.com/ramonvermeulen/whosthere.git
cd whosthere
make build
さらに、プリビルドされたバイナリをリリースページからダウンロードすることもできます。
使い方
対話型発見のために TUI を実行:
whosthere
単一スキャンを実行して結果を出力する CLI として実行:
whosthere scan -t 5
結果を JSON ファイルに出力:
whosthere scan -t 5 --json --pretty > devices.json
HTTP API 付きデーモンとして実行:
whosthere daemon --port=8080
追加のコマンドラインオプションは以下で確認できます:
whosthere --help
キーバインド (TUI)
| キー | アクション |
|---|---|
/ | 正規表現検索を開始 |
k | 上へ移動 |
j | 下へ移動 |
g | 先頭へ移動 |
G | 末尾へ移動 |
y | 選択したデバイスの IP をコピー |
Y | 選択したデバイスの MAC をコピー |
enter | デバイスの詳細を表示 |
CTRL+t | テーマセレクタの切り替え |
CTRL+i | インターフェースセレクタの切り替え |
CTRL+c/q | アプリケーションを停止 |
ESC | 検索をクリア / 戻る |
p (詳細ビュー) | デバイスでポートスキャンを開始 |
tab (モーダルビュー) | ボタン選択を切り替える |
設定
Whosthere は複数の設定方法をサポートしており、優先順位は以下の通り(高い順):
- コマンドラインフラグ - 最優先。利用可能なフラグは
whosthere --helpを参照。 - 環境変数 - プレフィックス
WHOSTHERE__を付ける。環境変数による設定 を参照。 - 設定ファイル - YAML 設定ファイル。設定ファイル を参照。
- デフォルト値 - フォールバックのデフォルト。config.go の
DefaultConfig()を参照。
設定ファイル
Whosthere は以下の順序で設定ファイルを探し、最初に見つかったものを使用します:
--configフラグまたはWHOSTHERE_CONFIG環境変数で指定されたパス$XDG_CONFIG_HOME/whosthere/config.yaml(XDG_CONFIG_HOMEが設定されている場合)~/.config/whosthere/config.yaml(デフォルトの場所)
設定例:
# 次の行のコメントを解除して特定のネットワークインターフェースを設定 - 未設定の場合は OS のデフォルトを使用
# network_interface: eth0
# 有効にすると、すべてのネットワークインターフェースのデバイスが表示され、インターフェースを切り替えても保持されます
# 注意: 2つのインターフェースが同じサブネットを共有している場合(例: 両方とも 192.168.1.x を使用)、
# デバイスは IP アドレスで識別されるため、統合される可能性があります。重複するサブネットでは注意して使用してください。
all_interfaces: false
# ディスカバリースキャンを実行する頻度
scan_interval: 20s
# 各スキャンの最大タイムアウト。スキャン間隔よりも短くすることを推奨
scan_timeout: 10s
scanners:
mdns:
enabled: true
ssdp:
enabled: true
arp:
enabled: true
sweeper:
enabled: true
interval: 5m
timeout: 20s
port_scanner:
timeout: 5s
# 発見されたデバイスでスキャンする TCP ポートのリスト
tcp: [21, 22, 23, 25, 80, 110, 135, 139, 143, 389, 443, 445, 993, 995, 1433, 1521, 3306, 3389, 5432, 5900, 8080, 8443, 9000, 9090, 9200, 9300, 10000, 27017]
splash:
enabled: true
delay: 1s
theme:
# 無効にすると、TUI はターミナルのデフォルト ANSI カラーを使用します
# ANSI カラーを完全に無効にするには、NO_COLOR 環境変数も参照してください
enabled: true
# 利用可能なテーマの完全なリストは https://github.com/ramonvermeulen/whosthere/tree/main/internal/ui/theme/theme.go を参照
# カスタムカラーを使用するには name を "custom" に設定
# 設定されていないカラーは、デフォルトのテーマ値がフォールバックとして使用されます
name: default
# ANSI カラーを完全に無効にします。theme.enabled を上書きします
# 環境変数 NO_COLOR または WHOSTHERE__THEME__NO_COLOR でも設定可能
# no_color: false
# カスタムテーマカラー(コメントを解除し、name: custom に設定して使用)
# primitive_background_color: "#000a1a"
# contrast_background_color: "#001a33"
# more_contrast_background_color: "#003366"
# border_color: "#0088ff"
# title_color: "#00ffff"
# graphics_color: "#00ffaa"
# primary_text_color: "#cceeff"
# secondary_text_color: "#6699ff"
# tertiary_text_color: "#ffaa00"
# inverse_text_color: "#000a1a"
# contrast_secondary_text_color: "#88ddff"
環境変数
一般環境変数
| 変数 | 説明 |
|---|---|
WHOSTHERE_CONFIG | 設定ファイルへのパス。デフォルトの場所を上書きするために使用します。 |
WHOSTHERE_LOG | ログレベルを設定(例: debug, info, warn, error)。デフォルトは info。 |
NO_COLOR | TUI で ANSI カラーを無効にします。 |
環境変数による設定
YAML 設定で利用可能なすべての設定オプションは、WHOSTHERE__ プレフィックス(二重アンダースコアに注意)を付けた環境変数で設定できます。ネストされた設定キーは二重アンダースコアで区切り、キーは大文字小文字を区別しません。
例:
WHOSTHERE__SPLASH__ENABLED=false- スプラッシュ画面を無効にします。YAML 設定のsplash.enabled: falseに相当WHOSTHERE__SPLASH__DELAY=2s- スプラッシュ画面の遅延を 2 秒に設定。YAML 設定のsplash.delay: 2sに相当WHOSTHERE__SCAN_INTERVAL=30s- スキャン間隔を 30 秒に設定。YAML 設定のscan_interval: 30sに相当WHOSTHERE__SCANNERS__MDNS__ENABLED=false- mDNS スキャナーを無効にします。YAML 設定のscanners.mdns.enabled: falseに相当WHOSTHERE__PORT_SCANNER__TCP=80,443,8080- スキャンするカスタム TCP ポートを設定。YAML 設定のport_scanner.tcp: [80, 443, 8080]に相当WHOSTHERE__THEME__NAME=cyberpunk- テーマを cyberpunk に設定。YAML 設定のtheme.name: cyberpunkに相当
デーモンモード HTTP API
Whosthere をデーモンモードで実行すると、以下のエンドポイントを持つ非常にシンプルな HTTP API が公開されます:
| メソッド | エンドポイント | 説明 |
|---|---|---|
| GET | /devices | 発見されたすべてのデバイスのリストを取得 |
| GET | /device/{ip} | 特定のデバイスの詳細を取得 |
| GET | /health | ヘルスチェック |
テーマ
テーマは設定ファイルで構成するか、実行時に CTRL+t キーバインドで変更できます。利用可能なテーマの完全なリストはこちらにあります。独自のテーマを追加する PR を歓迎します!
テーマ設定の例:
theme:
enabled: true
name: cyberpunk
name を custom に設定すると、他のカラーオプションを使用して独自のカスタムテーマを作成できます。enabled オプションを false に設定すると、TUI はターミナルのデフォルト ANSI カラーを使用します。NO_COLOR 環境変数が設定されている場合、すべての ANSI カラーが無効になります。
ログ
ログはアプリケーションのステートディレクトリに書き込まれます:
$XDG_STATE_HOME/whosthere/app.log(XDG_STATE_HOMEが設定されている場合)~/.local/state/whosthere/app.log(Linux/MacOS のフォールバック)%LOCALAPPDATA%/whosthere/app.log(Windows のフォールバック)
TUI モードで実行していない場合、ログはコンソールにも出力されます。
対応プラットフォーム
Whosthere は以下のプラットフォームでサポートされています:
- Linux
- macOS
- Windows
既知の問題
クリップボード機能を動作させるために、go-clipboard のフォーク を使用しています。お使いの OS に適したコピーツールがインストールされていることを確認してください:
| OS | サポートされているコピーツール |
|---|---|
| Darwin | pbcopy |
| Windows | clip.exe |
| Linux/FreeBSD/NetBSD/OpenBSD/Dragonfly | X11: xsel, xclip Wayland: wl-copy |
免責事項
Whosthere は、ご自身のホームネットワークなど、ネットワーク上の発見およびスキャンを行う許可があるネットワークでの使用を意図しています。許可なくネットワークをスキャンすることは、違法かつ非倫理的である可能性があります。このツールを使用する前に、必ず適切な許可を得てください。
このツールは主に教育目的とホームネットワークの探索のために作成されました。機能的で有用ではありますが、プロフェッショナルグレードのネットワーク監視ソリューションと見なすべきではありません。結果は非特権スキャン手法に基づいており、包括的ではない可能性があります。重要なネットワーク分析やセキュリティ評価には、正式なサポートのある確立された専門ツールの使用を検討してください。
コントリビューション
機能リクエスト、バグ報告、改善などの貢献や提案を歓迎します! GitHub リポジトリで issue を開いたり、プルリクエストを送信したりしてください。大きな変更を実装する前に、必ず GitHub の issue で議論してください。