[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-73284":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":10,"totalLinesOfCode":10,"stars":12,"forks":13,"watchers":14,"openIssues":15,"contributorsCount":16,"subscribersCount":16,"size":16,"stars1d":17,"stars7d":18,"stars30d":19,"stars90d":16,"forks30d":16,"starsTrendScore":20,"compositeScore":21,"rankGlobal":10,"rankLanguage":10,"license":22,"archived":23,"fork":23,"defaultBranch":24,"hasWiki":23,"hasPages":23,"topics":25,"createdAt":10,"pushedAt":10,"updatedAt":35,"readmeContent":36,"aiSummary":37,"trendingCount":16,"starSnapshotCount":16,"syncStatus":38,"lastSyncTime":39,"discoverSource":40},73284,"whosthere","ramonvermeulen\u002Fwhosthere","ramonvermeulen","Local Area Network discovery tool with an interactive Terminal User Interface (TUI) written in Go.  Discover, explore, and understand your LAN in an intuitive way. Knock Knock.. who's there? 🚪","",null,"Go",2317,65,7,6,0,4,13,99,12,27.46,"Apache License 2.0",false,"main",[26,27,28,29,30,31,32,33,34],"go","golang","lan","network","network-analysis","networking","scanner","tui","tview","2026-06-12 02:03:11","# Whosthere\n\n[![Go Report Card](https:\u002F\u002Fgoreportcard.com\u002Fbadge\u002Fgithub.com\u002Framonvermeulen\u002Fwhosthere)](https:\u002F\u002Fgoreportcard.com\u002Freport\u002Fgithub.com\u002Framonvermeulen\u002Fwhosthere)\n[![Go Version](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fgo-mod\u002Fgo-version\u002Framonvermeulen\u002Fwhosthere)](https:\u002F\u002Fgo.dev\u002Fdoc\u002Fdevel\u002Frelease)\n[![License](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Flicense\u002Framonvermeulen\u002Fwhosthere)](LICENSE)\n[![GitHub Release](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fv\u002Frelease\u002Framonvermeulen\u002Fwhosthere)](https:\u002F\u002Fgithub.com\u002Framonvermeulen\u002Fwhosthere\u002Freleases)\n[![GitHub Repo stars](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fstars\u002Framonvermeulen\u002Fwhosthere)](https:\u002F\u002Fgithub.com\u002Framonvermeulen\u002Fwhosthere)\n\nLocal Area Network discovery tool with an interactive Terminal User Interface (TUI) written in Go.\nDiscover, explore, and understand your LAN in an intuitive way.\n\nWhosthere performs **unprivileged, concurrent scans** using [**mDNS**](https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FMulticast_DNS)\nand [**SSDP**](https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FSimple_Service_Discovery_Protocol) scanners. Additionally, it sweeps the\nlocal subnet by attempting TCP\u002FUDP connections to trigger ARP resolution, then reads the\n[**ARP cache**](https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FAddress_Resolution_Protocol) to identify devices on your Local Area Network.\nThis technique populates the ARP cache without requiring elevated privileges. All discovered devices are enhanced with\n[**OUI**](https:\u002F\u002Fstandards-oui.ieee.org\u002F) lookups to display manufacturers when available.\n\nWhosthere provides a friendly, intuitive way to answer the question every network administrator asks: \"Who's there on my network?\"\n\n![demo gif](.github\u002Fassets\u002Fdemo.gif)\n\n## Features\n\n- **Interactive TUI:** Navigate and explore discovered devices intuitively.\n- **Fast & Concurrent:** Leverages multiple discovery methods simultaneously.\n- **No Elevated Privileges Required:** Runs entirely in user-space.\n- **Device Enrichment:** Uses [**OUI**](https:\u002F\u002Fstandards-oui.ieee.org\u002F) lookup to show device manufacturers.\n- **Integrated Port Scanner:** Optional service discovery on found hosts (only scan devices with permission!).\n- **Daemon Mode with HTTP API:** Run in the background and integrate with other tools.\n- **Theming & Configuration:** Personalize the look and behavior via YAML configuration.\n\n## Installation\n\nVia [**Homebrew**](https:\u002F\u002Fbrew.sh\u002F) with `brew`:\n\n```bash\nbrew install whosthere\n```\n\nOn [**NixOS**](https:\u002F\u002Fnixos.org\u002F) with `nix`:\n\n```bash\nnix profile install nixpkgs#whosthere\n```\n\nOn [**Arch Linux**](https:\u002F\u002Farchlinux.org\u002F) with `yay`:\n\n```bash\nyay -S whosthere-bin\n```\n\nIf your package manager is not listed you can always install with [**Go**](https:\u002F\u002Fgo.dev\u002F):\n\n```bash\ngo install github.com\u002Framonvermeulen\u002Fwhosthere@latest\n```\n\nOr **build from source**:\n\n```bash\ngit clone https:\u002F\u002Fgithub.com\u002Framonvermeulen\u002Fwhosthere.git\ncd whosthere\nmake build\n```\n\nAdditionally, you can download pre-built binaries from the\n[**releases page**](https:\u002F\u002Fgithub.com\u002Framonvermeulen\u002Fwhosthere\u002Freleases).\n\n## Usage\n\nRun the TUI for interactive discovery:\n\n```bash\nwhosthere\n```\n\nRun as cli to do a single scan and output results:\n\n```bash\nwhosthere scan -t 5\n```\n\nOutput results to a JSON file:\n\n```bash\nwhosthere scan -t 5 --json --pretty > devices.json\n```\n\nRun as a daemon with HTTP API:\n\n```bash\nwhosthere daemon --port=8080\n```\n\nAdditional command line options can be found by running:\n\n```bash\nwhosthere --help\n```\n\n## Key bindings (TUI)\n\n| Key                | Action                      |\n| ------------------ | --------------------------- |\n| `\u002F`                | Start regex search          |\n| `k`                | Up                          |\n| `j`                | Down                        |\n| `g`                | Go to top                   |\n| `G`                | Go to bottom                |\n| `y`                | Copy IP of selected device  |\n| `Y`                | Copy MAC of selected device |\n| `enter`            | Show device details         |\n| `CTRL+t`           | Toggle theme selector       |\n| `CTRL+c`\u002F`q`       | Stop application            |\n| `ESC`              | Clear search \u002F Go back      |\n| `p` (details view) | Start port scan on device   |\n| `tab` (modal view) | Switch button selection     |\n\n## Configuration\n\nWhosthere supports multiple configuration methods with the following precedence (highest to lowest):\n\n1. **Command line flags** - Highest priority. See `whosthere --help` for available flags.\n1. **Environment variables** - Prefix with `WHOSTHERE__`. See [**Configuration via Environment Variables**](#configuration-via-environment-variables).\n1. **Configuration file** - YAML config file. See [**Configuration File**](#configuration-file).\n1. **Default values** - Fallback defaults. See `DefaultConfig()` in [**config.go**](https:\u002F\u002Fgithub.com\u002Framonvermeulen\u002Fwhosthere\u002Fblob\u002Fmain\u002Finternal\u002Fcore\u002Fconfig\u002Fconfig.go).\n\n### Configuration File\n\nWhosthere looks for the configuration file in the following order, using the first one found:\n\n1. Path specified via `--config` flag or `WHOSTHERE_CONFIG` environment variable\n1. `$XDG_CONFIG_HOME\u002Fwhosthere\u002Fconfig.yaml` (if `XDG_CONFIG_HOME` is set)\n1. `~\u002F.config\u002Fwhosthere\u002Fconfig.yaml` (default location)\n\n**Example configuration:**\n\n```yaml\n# Uncomment the next line to configure a specific network interface - uses OS default if not set\n# network_interface: eth0\n\n# How often to run discovery scans\nscan_interval: 20s\n\n# Maximum timeout for each scan, recommended to be less than the scan interval\nscan_timeout: 10s\n\nscanners:\n  mdns:\n    enabled: true\n  ssdp:\n    enabled: true\n  arp:\n    enabled: true\n\nsweeper:\n  enabled: true\n  interval: 5m\n  timeout: 20s\n\nport_scanner:\n  timeout: 5s\n  # List of TCP ports to scan on discovered devices\n  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]\n\nsplash:\n  enabled: true\n  delay: 1s\n\ntheme:\n  # When disabled, the TUI will use the terminal it's default ANSI colors\n  # Also see the NO_COLOR environment variable to completely disable ANSI colors\n  enabled: true\n\n  # See the complete list of available themes at https:\u002F\u002Fgithub.com\u002Framonvermeulen\u002Fwhosthere\u002Ftree\u002Fmain\u002Finternal\u002Fui\u002Ftheme\u002Ftheme.go\n  # Set name to \"custom\" to use the custom colors below\n  # For any color that is not configured it will take the default theme value as fallback\n  name: default\n\n  # Disable ANSI colors completely, overrides theme.enabled\n  # Can also be set via NO_COLOR or WHOSTHERE__THEME__NO_COLOR environment variables\n  # no_color: false\n\n  # Custom theme colors (uncomment and set name: custom to use)\n  # primitive_background_color: \"#000a1a\"\n  # contrast_background_color: \"#001a33\"\n  # more_contrast_background_color: \"#003366\"\n  # border_color: \"#0088ff\"\n  # title_color: \"#00ffff\"\n  # graphics_color: \"#00ffaa\"\n  # primary_text_color: \"#cceeff\"\n  # secondary_text_color: \"#6699ff\"\n  # tertiary_text_color: \"#ffaa00\"\n  # inverse_text_color: \"#000a1a\"\n  # contrast_secondary_text_color: \"#88ddff\"\n```\n\n## Environment Variables\n\n### General Environment Variables\n\n| Variable           | Description                                                                     |\n| ------------------ | ------------------------------------------------------------------------------- |\n| `WHOSTHERE_CONFIG` | Path to the configuration file, to be able to overwrite the default location.   |\n| `WHOSTHERE_LOG`    | Set the log level (e.g., `debug`, `info`, `warn`, `error`). Defaults to `info`. |\n| `NO_COLOR`         | Disable ANSI colors in the TUI.                                                 |\n\n### Configuration via Environment Variables\n\nAny configuration option that is available in the YAML configuration, can be set via environment variables using the\n`WHOSTHERE__` prefix (note the double underscore). Nested configuration keys are separated by double underscores, and\nkeys are case-insensitive.\n\nExamples:\n\n- `WHOSTHERE__SPLASH__ENABLED=false` - Disable the splash screen, equivalent to `splash.enabled: false` in the YAML config\n- `WHOSTHERE__SPLASH__DELAY=2s` - Set splash screen delay to 2 seconds, equivalent to `splash.delay: 2s` in the YAML config\n- `WHOSTHERE__SCAN_INTERVAL=30s` - Set scan interval to 30 seconds, equivalent to `scan_interval: 30s` in the YAML config\n- `WHOSTHERE__SCANNERS__MDNS__ENABLED=false` - Disable mDNS scanner, equivalent to `scanners.mdns.enabled: false` in the YAML config\n- `WHOSTHERE__PORT_SCANNER__TCP=80,443,8080` - Set custom TCP ports to scan, equivalent to `port_scanner.tcp: [80, 443, 8080]` in the YAML config\n- `WHOSTHERE__THEME__NAME=cyberpunk` - Set theme to cyberpunk, equivalent to `theme.name: cyberpunk` in the YAML config\n\n## Daemon mode HTTP API\n\nWhen running Whosthere in daemon mode, it exposes an very simplistic HTTP API with the following endpoints:\n\n| Method | Endpoint       | Description                        |\n| ------ | -------------- | ---------------------------------- |\n| GET    | `\u002Fdevices`     | Get list of all discovered devices |\n| GET    | `\u002Fdevice\u002F{ip}` | Get details of a specific device   |\n| GET    | `\u002Fhealth`      | Health check                       |\n\n## Themes\n\nTheme can be configured via the configuration file, or at runtime via the `CTRL+t` key binding.\nA complete list of available themes can be found [**here**](https:\u002F\u002Fgithub.com\u002Framonvermeulen\u002Fwhosthere\u002Fblob\u002Fmain\u002Finternal\u002Fui\u002Ftheme\u002Ftheme.go), feel free to open a PR to add your own theme!\n\nExample of theme configuration:\n\n```yaml\ntheme:\n  enabled: true\n  name: cyberpunk\n```\n\nWhen the `name` is set to `custom`, the other color options can be used to create your own custom theme.\nWhen the `enabled` option is set to `false`, the TUI will use the terminal's default ANSI colors.\nWhen `NO_COLOR` environment variable is set, all ANSI colors will be disabled.\n\n## Logging\n\nLogs are written to the application's state directory:\n\n- `$XDG_STATE_HOME\u002Fwhosthere\u002Fapp.log` (if `XDG_STATE_HOME` is set)\n- `~\u002F.local\u002Fstate\u002Fwhosthere\u002Fapp.log` (fallback Linux\u002FMacOS)\n- `%LOCALAPPDATA%\u002Fwhosthere\u002Fapp.log` (fallback Windows)\n\nWhen not running in TUI mode, logs are also written to the console.\n\n## Platforms\n\nWhosthere is supported on the following platforms:\n\n- [x] Linux\n- [x] macOS\n- [x] Windows\n\n## Known Issues\n\nFor clipboard functionality to work, a [**fork of go-clipboard**](https:\u002F\u002Fgithub.com\u002Fdece2183\u002Fgo-clipboard) is used.\nEnsure you have the appropriate copy tool installed for your OS:\n\n| OS                                     | Supported copy tools                         |\n| -------------------------------------- | -------------------------------------------- |\n| Darwin                                 | `pbcopy`                                     |\n| Windows                                | `clip.exe`                                   |\n| Linux\u002FFreeBSD\u002FNetBSD\u002FOpenBSD\u002FDragonfly | X11: `xsel`, `xclip` \u003Cbr> Wayland: `wl-copy` |\n\n## Disclaimer\n\nWhosthere is intended for use on networks where you have permission to perform network discovery and scanning,\nsuch as your own home network. Unauthorized scanning of networks may be illegal and unethical.\nAlways obtain proper authorization before using this tool on any network.\n\nThis tool was created primarily for educational purposes and home network exploration. While functional\nand useful, it should not be considered a professional-grade network monitoring solution. Results are\nbased on unprivileged scanning techniques and may not be comprehensive. For critical network analysis\nor security assessments, consider using established professional tools with formal support.\n\n## Contributing\n\nContributions and suggestions such as feature requests, bug reports, or improvements are welcome!\nFeel free to open issues or submit pull requests on the GitHub repository.\nPlease make sure to discuss any major changes on a Github issue before implementing them.\n","Whosthere 是一个用 Go 语言编写的局域网发现工具，配备了一个交互式的终端用户界面（TUI），帮助用户直观地探索和理解自己的局域网。其核心功能包括使用 mDNS 和 SSDP 扫描器进行非特权、并发扫描，并通过 ARP 缓存解析来识别网络中的设备，无需管理员权限即可运行。此外，该工具支持 OUI 查找以显示设备制造商信息，并提供可选的服务端口扫描及后台模式下的 HTTP API 接口，便于与其他系统集成。Whosthere 适用于网络管理员或任何希望快速了解本地网络中活动设备的用户，在日常网络维护、故障排查以及安全审计等场景下尤为有用。",2,"2026-06-11 03:44:51","high_star"]