15 điểm bởi GN⁺ 2026-01-25 | 1 bình luận | Chia sẻ qua WhatsApp
  • Whostherecông cụ khám phá mạng cục bộ được viết bằng ngôn ngữ Go, cung cấp giao diện người dùng terminal (TUI) trực quan
    • Có thể phát hiện và duyệt các thiết bị trong LAN, đồng thời hiểu rõ cấu trúc mạng
  • Hỗ trợ Linux, macOS, Windows
  • Sử dụng mDNS, trình quét SSDPthử kết nối TCP/UDP để làm đầy bộ nhớ đệm ARP nhằm nhận diện thiết bị
    • Có thể thu thập danh sách thiết bị bằng cách tận dụng bộ nhớ đệm ARP mà không cần quyền quản trị
  • Với các thiết bị được phát hiện, công cụ hiển thị thông tin nhà sản xuất thông qua tra cứu OUI (Organizationally Unique Identifier)
  • Giấy phép Apache-2.0

Tính năng chính

  • Modern TUI: Cung cấp giao diện để duyệt các thiết bị đã khám phá một cách trực quan
  • Fast & Concurrent: Thực hiện đồng thời nhiều phương thức khám phá để cho kết quả nhanh
  • No Elevated Privileges Required: Có thể chạy chỉ với quyền người dùng thông thường
  • Device Enrichment: Hiển thị thông tin nhà sản xuất thông qua tra cứu OUI
  • Integrated Port Scanner: Bao gồm chức năng quét cổng của các host đã phát hiện (khuyến nghị chỉ quét các thiết bị được phép)
  • Daemon Mode with HTTP API: Có thể chạy nền và tích hợp với các công cụ bên ngoài
  • Theming & Configuration: Tùy biến giao diện và cách hoạt động thông qua tệp cấu hình YAML

Cách dùng

  • Chạy TUI: whosthere
  • Chạy chế độ daemon HTTP API: whosthere daemon --port 8080
    • GET /devices: Trả về danh sách tất cả thiết bị đã phát hiện
    • GET /device/{ip}: Trả về thông tin chi tiết của thiết bị cụ thể
    • GET /health: Kiểm tra trạng thái

1 bình luận

 
GN⁺ 2026-01-25
Ý kiến trên Hacker News
  • Tôi đã làm một công cụ TUI khám phá LAN viết bằng Go. Tên của nó là Whosthere, được thiết kế để khám phá các thiết bị trong mạng cục bộ mà không cần quyền quản trị
    Nó kết hợp mDNS, SSDP, bộ nhớ đệm ARP, tra cứu OUI và nhiều thứ khác để tìm thiết bị, đồng thời hỗ trợ UI nhanh, ưu tiên bàn phím dựa trên tview, trình quét cổng tích hợp, chế độ daemon HTTP API và tệp cấu hình YAML
    Đây là dự án được làm để học cả Go lẫn mạng cùng lúc, lấy cảm hứng từ các ứng dụng TUI như lazygit, k9s và dive
    Có thể cài bằng Homebrew hoặc go install, hỗ trợ Linux và macOS

    • Công cụ này rất tuyệt :-) Sẽ tốt hơn nếu có tính năng tra cứu ngược IP (reverse lookup). Trong LAN của tôi, các thiết bị không có tên thường rất có thể là thiết bị xâm nhập
    • Đây đúng là thứ tôi đang tìm! Tôi đã so sánh với các trình quét khác, và Advanced IP Scanner vẫn là tốt nhất về phát hiện hostname.
      Kết quả trên mạng của tôi như sau:
      • Advanced IP Scanner: xác định được tên 80/309 thiết bị
      • Angry IP Scanner: xác định được tên 75/315 thiết bị
      • whosthere: xác định được tên 54/318 thiết bị
    • Tôi đã cài trên Raspbian và nó hoạt động rất tốt. Tốt hơn nhiều so với đoạn mã tôi vội vàng viết hôm qua. Nếu có tính năng ghi log các thiết bị mới xuất hiện thì có lẽ còn dùng được như một IDS đơn giản
    • Hay đấy! Vài ngày trước tôi cũng nghĩ đến một ý tưởng tương tự, nên thật vui khi thấy thứ này xuất hiện. Nó cũng chạy tốt trên mạng của tôi
    • Là TUI thì tại sao lại có phụ thuộc X11 nhỉ. Tôi cứ nghĩ nó sẽ dựa trên ncurses
  • Có một câu nổi tiếng rằng: “Ai không nhớ đến nmap thì số phận sẽ bắt họ vụng về làm lại nó”
    Có chia sẻ một ví dụ lệnh có thể quét /24 trong chưa tới 10 giây mà không cần quyền root
    Tham khảo tài liệu chính thức của nmap

    • Tôi cũng dùng nmap thường xuyên, nhưng có vẻ công cụ này có mục đích khác hoặc có thêm chức năng ngoài nmap. Tôi tò mò vì sao lại xem đây là ví dụ của việc ‘không nhớ đến’ nmap
    • Có lẽ LLDP và CDP cũng muốn tham gia vào cuộc trò chuyện này
  • Cách đây 5 năm tôi cũng làm một công cụ CLI tương tự với cùng ý tưởng, và tên cũng gần như y hệt, là phiên bản tiếng Ba Lan của “whosthere”: ktotu
    Liên kết dự án ktotu
    Phiên bản này hoàn thiện hơn nhiều và việc chọn Go cũng là một quyết định đúng đắn. Tôi tò mò không biết ý tưởng có được tạo ra bằng AI không

  • Nhìn chung đây là một công cụ được làm tốt. Sẽ hay hơn nếu có tùy chọn -i để chỉ định interface cần quét.
    Trên laptop của tôi, chỉ lần quét đầu tiên là hoạt động đúng, sau đó tôi không còn thấy các ARP request nữa

    • Đúng vậy. Để giảm tải mạng, lần quét ban đầu hiện có các giới hạn như sau:
      1. Chỉ quét subnet của interface được chỉ định
      2. Chỉ cho phép tối đa tới /16
      3. Chỉ chạy một lần mỗi 5 phút (hiện đang được hardcode)
        Có thể cấu hình interface trong tệp YAML, và sau này dự định sẽ cho phép chỉnh bằng cờ dòng lệnh nữa
  • Nếu đặt tên là “whogoesthere” thì có lẽ còn vui hơn

    • Tôi thấy “whodat” còn hợp hơn
  • Tôi tò mò không biết thư viện chuẩn của Go có hỗ trợ TUI đặc biệt tốt không. Dạo này có vẻ mọi TUI mới đều được viết bằng Go

    • Go biên dịch và chạy nhanh, lại không có các ràng buộc build phức tạp như Rust
    • Thư viện chuẩn hầu như không có gì liên quan đến TUI, nhưng rivo/tview rất vững chắc
    • Không có trong thư viện chuẩn, nhưng nhiều TUI Go phổ biến được xây trên Bubble Tea. Dự án này dùng tview
  • Nếu đặt tên là “Whose LAN is it anyway? ” thì có lẽ sẽ hóm hỉnh hơn

  • Kỹ năng kỹ thuật thật ấn tượng. Có vẻ giờ bạn đã thực sự bước vào con đường của một kỹ sư
    Tuy không thể trực tiếp xem lưu lượng mạng, nhưng tôi thường thấy nhiều người cố chẩn đoán vấn đề mà không có những công cụ như thế này
    Trên thực tế, các công cụ như nmap, wireshark, LLDP, CDP là thiết yếu, và với mạng quy mô lớn thì tôi khuyên dùng Netdisco

  • Thật thú vị khi các “TUI hiện đại” ngày nay rốt cuộc lại đang tái hiện phong cách hoài cổ của thời Turbo Vision, Clipper, curses

  • Không biết đã thử trên Tailscale chưa. Nó có thể rất hữu ích, nhưng Tailscale hiện vẫn chưa hỗ trợ mDNS
    Liên kết issue liên quan