15 ポイント 投稿者 GN⁺ 2026-01-25 | 1件のコメント | WhatsAppで共有
  • WhosthereはGo言語で書かれたローカルネットワーク探索ツールで、直感的な**ターミナルユーザーインターフェース(TUI)**を提供
    • LAN内のデバイスを発見・探索し、ネットワーク構造を把握可能
  • LinuxmacOSWindowsをサポート
  • mDNSSSDPスキャナー、そして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件のコメント

 
GN⁺ 2026-01-25
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をサポートする

    • とてもいいツール :-) IPの**逆引き(reverse lookup)**機能があるとよさそう。うちのLANでは名前のないデバイスはたいてい侵入者の可能性が高い
    • こういうのを探していた! 他のスキャナーと比較してみたが、Advanced IP Scannerはいまだにホスト名検出では最強だった。
      自分のネットワークでの結果は以下の通り:
      • Advanced IP Scanner: 309台中80台の名前を確認
      • Angry IP Scanner: 315台中75台の名前を確認
      • whosthere: 318台中54台の名前を確認
    • Raspbianに入れてみたが非常によく動く。昨日急いで作ったコードよりずっといい。新しく現れたデバイスをログに記録する機能があれば、簡易IDSとしても使えそう
    • すばらしい! 数日前に自分も似たアイデアを考えていたので、こうして出てきてうれしい。自分のネットワークでもうまく動いた
    • TUIなのにどうしてX11依存があるのか気になる。ncursesベースだと思っていた
  • 「nmapを覚えていない者は、それを下手に作り直す運命にある」という有名な言葉がある
    ルート権限なしで/24スキャンを10秒以内に終えるコマンド例を共有している
    nmap公式ドキュメント参照

    • 自分もnmapはよく使うが、このツールはnmapとは目的が違うか、追加機能があるように見える。なぜnmapを「覚えていなかった」例だと思うのか気になる
    • LLDPとCDPも会話に加わりたがっているだろう
  • 5年前に自分も同じアイデアで似たCLIツールを作ったが、名前まで同じで、「whosthere」のポーランド語版であるktotuだった
    ktotuプロジェクトのリンク
    今回の版ははるかに完成度が高く、Goを選んだのもよい判断だ。もしかしてAIでアイデアを生成したのか気になる

  • 全体的によくできたツール。-iオプションでスキャンするインターフェースを指定できるとよさそう。
    自分のノートPCでは最初のスキャンだけは正常で、その後はARPリクエストが見えなかった

    • その通り。ネットワーク負荷を減らすため、初期スキャンには次のような制限がある:
      1. 指定されたインターフェースのサブネットだけをスキャン
      2. 最大 /16 まで許可
      3. 5分ごとに1回だけ実行(現在はハードコード)
        インターフェース設定はYAMLファイルで可能で、今後はコマンドラインフラグでも調整できるようにする予定
  • 名前を「whogoesthere」にしていたらもっと面白かったかもしれない

    • 自分は「whodat」のほうが合っていると思う
  • Go標準ライブラリではTUI関連機能が特別に充実しているのか気になる。最近の新しいTUIはみんなGoで書かれているように見える

    • Goはコンパイルも実行も速く、Rustのような複雑なビルド制約がない
    • 標準ライブラリにはTUI関連機能はほとんどないが、rivo/tviewが非常に堅牢
    • 標準にはないが、多くの人気Go TUIはBubble Teaを基盤にしている。このプロジェクトはtviewを使っている
  • 名前を「Whose LAN is it anyway?」にしたらもっと気が利いていたかもしれない

  • 見事な技術力だ。いよいよ本当にエンジニアの道に入った感じがする
    ネットワークトラフィック自体は直接見られないが、こうしたツールなしで問題を診断しようとする人をよく見かける
    実際にはnmap、wireshark、LLDP、CDPのようなツールが必須で、大規模ネットワークにはNetdiscoを勧める

  • 最近の「モダンTUI」が、結局はTurbo Vision、Clipper、curses時代のレトロ感を再現しているのが興味深い

  • Tailscaleで試したか気になる。とても有用かもしれないが、TailscaleはまだmDNSをサポートしていない
    関連イシューへのリンク