
whosthere v0.8.3
Инструмент для обнаружения локальной сети с интерактивным терминальным пользовательским интерфейсом (TUI), написанный на Go. Обнаруживайте, исследуйте и понимайте свою LAN интуитивно. Тук-тук.. кто там? 🚪
Whosthere
Инструмент для обнаружения устройств в локальной сети с интерактивным терминальным интерфейсом (TUI), написанный на Go. Обнаруживайте, исследуйте и понимайте свою локальную сеть интуитивно понятным способом.
Whosthere выполняет непривилегированные, параллельные сканирования с помощью сканеров mDNS и SSDP. Кроме того, он прощупывает локальную подсеть, пытаясь установить TCP/UDP-соединения для запуска разрешения ARP, а затем считывает ARP-кэш для идентификации устройств в вашей локальной сети. Этот метод заполняет 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-файл. См. Файл конфигурации.
- Значения по умолчанию - Запасные значения по умолчанию. См.
DefaultConfig()в config.go.
Файл конфигурации
Whosthere ищет файл конфигурации в следующем порядке, используя первый найденный:
- Путь, указанный через флаг
--configили переменную окруженияWHOSTHERE_CONFIG $XDG_CONFIG_HOME/whosthere/config.yaml(если заданоXDG_CONFIG_HOME)~/.config/whosthere/config.yaml(расположение по умолчанию)
Пример конфигурации:
# Uncomment the next line to configure a specific network interface - uses OS default if not set
# network_interface: eth0
# When enabled, devices from all network interfaces are shown and persist when switching interfaces
# Note: if two interfaces share the same subnet (e.g. both use 192.168.1.x), devices may get merged
# since they are identified by IP address. Use with caution on overlapping subnets.
all_interfaces: false
# How often to run discovery scans
scan_interval: 20s
# Maximum timeout for each scan, recommended to be less than the scan interval
scan_timeout: 10s
scanners:
mdns:
enabled: true
ssdp:
enabled: true
arp:
enabled: true
sweeper:
enabled: true
interval: 5m
timeout: 20s
port_scanner:
timeout: 5s
# List of TCP ports to scan on discovered devices
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:
# When disabled, the TUI will use the terminal it's default ANSI colors
# Also see the NO_COLOR environment variable to completely disable ANSI colors
enabled: true
# See the complete list of available themes at https://github.com/ramonvermeulen/whosthere/tree/main/internal/ui/theme/theme.go
# Set name to "custom" to use the custom colors below
# For any color that is not configured it will take the default theme value as fallback
name: default
# Disable ANSI colors completely, overrides theme.enabled
# Can also be set via NO_COLOR or WHOSTHERE__THEME__NO_COLOR environment variables
# no_color: false
# Custom theme colors (uncomment and set name: custom to use)
# 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 | Отключить ANSI-цвета в TUI. |
Конфигурация через переменные окружения
Любой параметр конфигурации, доступный в YAML-конфигурации, можно задать через переменные окружения, используя
префикс WHOSTHERE__ (обратите внимание на двойное подчеркивание). Вложенные ключи конфигурации разделяются двойными подчеркиваниями, и
ключи нечувствительны к регистру.
Примеры:
WHOSTHERE__SPLASH__ENABLED=false- Отключить заставку, эквивалентноsplash.enabled: falseв YAML-конфигурацииWHOSTHERE__SPLASH__DELAY=2s- Установить задержку заставки 2 секунды, эквивалентноsplash.delay: 2sв YAML-конфигурацииWHOSTHERE__SCAN_INTERVAL=30s- Установить интервал сканирования 30 секунд, эквивалентноscan_interval: 30sв YAML-конфигурацииWHOSTHERE__SCANNERS__MDNS__ENABLED=false- Отключить mDNS-сканер, эквивалентноscanners.mdns.enabled: falseв YAML-конфигурацииWHOSTHERE__PORT_SCANNER__TCP=80,443,8080- Установить пользовательские TCP-порты для сканирования, эквивалентноport_scanner.tcp: [80, 443, 8080]в YAML-конфигурацииWHOSTHERE__THEME__NAME=cyberpunk- Установить тему cyberpunk, эквивалентноtheme.name: cyberpunkв YAML-конфигурации
Режим демона 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. Убедитесь, что у вас установлена соответствующая утилита копирования для вашей ОС:
| ОС | Поддерживаемые утилиты копирования |
|---|---|
| Darwin | pbcopy |
| Windows | clip.exe |
| Linux/FreeBSD/NetBSD/OpenBSD/Dragonfly | X11: xsel, xclip Wayland: wl-copy |
Отказ от ответственности
Whosthere предназначен для использования в сетях, где у вас есть разрешение на выполнение обнаружения и сканирования, например, в вашей домашней сети. Несанкционированное сканирование сетей может быть незаконным и неэтичным. Всегда получайте соответствующее разрешение перед использованием этого инструмента в любой сети.
Этот инструмент был создан в первую очередь в образовательных целях и для исследования домашней сети. Хотя он функционален и полезен, его не следует рассматривать как профессиональное решение для мониторинга сети. Результаты основаны на непривилегированных методах сканирования и могут быть неполными. Для критического анализа сети или оценки безопасности рассмотрите возможность использования проверенных профессиональных инструментов с официальной поддержкой.
Вклад
Приветствуются вклады и предложения, такие как запросы функций, сообщения об ошибках или улучшения! Не стесняйтесь открывать issue или отправлять pull request в репозиторий GitHub. Пожалуйста, обсудите любые серьёзные изменения в issue на GitHub перед их реализацией.