2P by GN⁺ 2시간전 | ★ favorite | 댓글 1개
  • Whosthere는 Go 언어로 작성된 로컬 네트워크 탐색 도구로, 직관적인 터미널 사용자 인터페이스(TUI) 제공
    • LAN 내 장치를 발견하고 탐색하며, 네트워크 구조를 이해할 수 있음
  • Linux, macOS, Windows 지원
  • 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: 상태 확인
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 옵션으로 스캔할 인터페이스 지정이 가능하면 좋겠음.
    내 노트북에서는 첫 스캔만 제대로 되고 이후에는 ARP 요청이 보이지 않았음

    • 맞음. 네트워크 부하를 줄이기 위해 초기 스캔은 다음과 같은 제한이 있음:
      1. 지정된 인터페이스의 서브넷만 스캔
      2. 최대 /16까지만 허용
      3. 5분마다 한 번만 실행 (현재 하드코딩되어 있음)
        인터페이스 설정은 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를 지원하지 않음
    관련 이슈 링크