์—…๋ฐ์ดํŠธ๋กœ ๋Œ์•„๊ฐ€๊ธฐ
New releaseAug 20, 2026

whosthere v0.8.3

Go๋กœ ์ž‘์„ฑ๋œ ๋Œ€ํ™”ํ˜• ํ„ฐ๋ฏธ๋„ ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค(TUI)๋ฅผ ๊ฐ–์ถ˜ ๊ทผ๊ฑฐ๋ฆฌ ํ†ต์‹ ๋ง(LAN) ํƒ์ƒ‰ ๋„๊ตฌ์ž…๋‹ˆ๋‹ค. ์ง๊ด€์ ์ธ ๋ฐฉ์‹์œผ๋กœ LAN์„ ๋ฐœ๊ฒฌํ•˜๊ณ  ํƒ์ƒ‰ํ•˜๋ฉฐ ์ดํ•ดํ•˜์„ธ์š”. ๋˜‘๋˜‘.. ๋ˆ„๊ตฌ์„ธ์š”? ๐Ÿšช

๊ณต์œ 

Whosthere

Go Version License GitHub Downloads (all assets, all releases) GitHub Release GitHub Repo stars

Go๋กœ ์ž‘์„ฑ๋œ ๋Œ€ํ™”ํ˜• ํ„ฐ๋ฏธ๋„ ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค(TUI)๋ฅผ ๊ฐ–์ถ˜ ๊ทผ๊ฑฐ๋ฆฌ ํ†ต์‹ ๋ง(LAN) ๊ฒ€์ƒ‰ ๋„๊ตฌ์ž…๋‹ˆ๋‹ค. ์ง๊ด€์ ์ธ ๋ฐฉ์‹์œผ๋กœ LAN์„ ๊ฒ€์ƒ‰ํ•˜๊ณ , ํƒ์ƒ‰ํ•˜๊ณ , ์ดํ•ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Whosthere๋Š” mDNS ๋ฐ SSDP ์Šค์บ๋„ˆ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ถŒํ•œ ์—†์ด ๋™์‹œ ์Šค์บ”์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ TCP/UDP ์—ฐ๊ฒฐ์„ ์‹œ๋„ํ•˜์—ฌ ARP ํ™•์ธ์„ ํŠธ๋ฆฌ๊ฑฐํ•œ ๋‹ค์Œ ARP ์บ์‹œ๋ฅผ ์ฝ์–ด ๋กœ์ปฌ ์„œ๋ธŒ๋„ท์„ ์Šค์œ•ํ•˜์—ฌ ๊ทผ๊ฑฐ๋ฆฌ ํ†ต์‹ ๋ง์˜ ์žฅ์น˜๋ฅผ ์‹๋ณ„ํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ธฐ๋ฒ•์€ ์ƒ์Šน๋œ ๊ถŒํ•œ ์—†์ด ARP ์บ์‹œ๋ฅผ ์ฑ„์›๋‹ˆ๋‹ค. ๊ฒ€์ƒ‰๋œ ๋ชจ๋“  ์žฅ์น˜๋Š” ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ ์ œ์กฐ์—…์ฒด๋ฅผ ํ‘œ์‹œํ•˜๊ธฐ ์œ„ํ•ด OUI ์กฐํšŒ๋กœ ๋ณด๊ฐ•๋ฉ๋‹ˆ๋‹ค.

Whosthere๋Š” ๋ชจ๋“  ๋„คํŠธ์›Œํฌ ๊ด€๋ฆฌ์ž๊ฐ€ ๋ฌป๋Š” ์งˆ๋ฌธ์ธ "๋‚ด ๋„คํŠธ์›Œํฌ์— ๋ˆ„๊ฐ€ ์žˆ๋‚˜์š”?"์— ๋‹ตํ•  ์ˆ˜ ์žˆ๋Š” ์นœ์ ˆํ•˜๊ณ  ์ง๊ด€์ ์ธ ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

demo gif

๊ธฐ๋Šฅ

  • ๋Œ€ํ™”ํ˜• 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๋Š” ๋‹ค์Œ ์šฐ์„ ์ˆœ์œ„(๋†’์€ ์ˆœ์—์„œ ๋‚ฎ์€ ์ˆœ)๋กœ ์—ฌ๋Ÿฌ ๊ตฌ์„ฑ ๋ฐฉ๋ฒ•์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค:

  1. ๋ช…๋ น์ค„ ํ”Œ๋ž˜๊ทธ - ๊ฐ€์žฅ ๋†’์€ ์šฐ์„ ์ˆœ์œ„. ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ํ”Œ๋ž˜๊ทธ๋Š” whosthere --help๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.
  2. ํ™˜๊ฒฝ ๋ณ€์ˆ˜ - WHOSTHERE__ ์ ‘๋‘์‚ฌ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ํ†ตํ•œ ๊ตฌ์„ฑ์„ ์ฐธ์กฐํ•˜์„ธ์š”.
  3. ๊ตฌ์„ฑ ํŒŒ์ผ - YAML ๊ตฌ์„ฑ ํŒŒ์ผ. ๊ตฌ์„ฑ ํŒŒ์ผ์„ ์ฐธ์กฐํ•˜์„ธ์š”.
  4. ๊ธฐ๋ณธ๊ฐ’ - ๋Œ€์ฒด ๊ธฐ๋ณธ๊ฐ’. config.go์˜ DefaultConfig()๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

๊ตฌ์„ฑ ํŒŒ์ผ

Whosthere๋Š” ๋‹ค์Œ ์ˆœ์„œ๋กœ ๊ตฌ์„ฑ ํŒŒ์ผ์„ ์ฐพ์œผ๋ฉฐ, ์ฒ˜์Œ ๋ฐœ๊ฒฌ๋œ ๊ฒƒ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค:

  1. --config ํ”Œ๋ž˜๊ทธ ๋˜๋Š” WHOSTHERE_CONFIG ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋กœ ์ง€์ •๋œ ๊ฒฝ๋กœ
  2. $XDG_CONFIG_HOME/whosthere/config.yaml (XDG_CONFIG_HOME์ด ์„ค์ •๋œ ๊ฒฝ์šฐ)
  3. ~/.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

# Optional IPv4 CIDR subnets to sweep. When set, the sweeper skips the auto-detected interface subnet unless it is listed here.
# target_subnets: ["10.0.0.0/24", "10.0.1.0/24"]

# WARNING: scanning subnets larger than /16 sends packets to 65535+ IPs per subnet. Enable only if you understand the traffic implications. Consider using smaller /24 subnets for targeted scanning.
# scan_large_subnets: 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_COLORTUI์—์„œ ANSI ์ƒ‰์ƒ์„ ๋น„ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค.

ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ํ†ตํ•œ ๊ตฌ์„ฑ

YAML ๊ตฌ์„ฑ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ๊ตฌ์„ฑ ์˜ต์…˜์€ WHOSTHERE__ ์ ‘๋‘์‚ฌ(๋ฐ‘์ค„ ๋‘ ๊ฐœ์— ์ฃผ์˜)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋กœ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ค‘์ฒฉ๋œ ๊ตฌ์„ฑ ํ‚ค๋Š” ๋ฐ‘์ค„ ๋‘ ๊ฐœ๋กœ ๊ตฌ๋ถ„๋˜๋ฉฐ, ํ‚ค๋Š” ๋Œ€์†Œ๋ฌธ์ž๋ฅผ ๊ตฌ๋ถ„ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์˜ˆ์‹œ:

์นดํ…Œ๊ณ ๋ฆฌ