
whosthere v0.8.3
أداة اكتشاف الشبكة المحلية (LAN) بواجهة مستخدم تفاعلية نصية (TUI) مكتوبة بلغة Go. اكتشف شبكتك المحلية واستكشفها وافهمها بطريقة بديهية. طرق طرق.. من هناك؟ 🚪
Whosthere
أداة اكتشاف شبكة المنطقة المحلية (LAN) مع واجهة مستخدم طرفية تفاعلية (TUI) مكتوبة بلغة Go. اكتشف واستكشف وافهم شبكتك المحلية بطريقة بديهية.
يقوم Whosthere بإجراء مسح غير مميز ومتزامن باستخدام ماسحات mDNS وSSDP. بالإضافة إلى ذلك، يقوم بمسح الشبكة الفرعية المحلية عن طريق محاولة اتصالات TCP/UDP لتحفيز تحليل ARP، ثم يقرأ ذاكرة التخزين المؤقت ARP لتحديد الأجهزة على شبكتك المحلية. تعمل هذه التقنية على ملء ذاكرة التخزين المؤقت ARP دون الحاجة إلى صلاحيات مرتفعة. يتم تحسين جميع الأجهزة المكتشفة من خلال بحث OUI لعرض الشركات المصنعة عند توفرها.
يوفر Whosthere طريقة ودية وبديهية للإجابة على السؤال الذي يطرحه كل مسؤول شبكة: "من هناك على شبكتي؟"

الميزات
- واجهة مستخدم تفاعلية (TUI): تنقل واستكشف الأجهزة المكتشفة بشكل بديهي.
- سريع ومتزامن: يستخدم طرق اكتشاف متعددة في آن واحد.
- لا يتطلب صلاحيات مرتفعة: يعمل بالكامل في مساحة المستخدم.
- إثراء الأجهزة: يستخدم بحث OUI لعرض الشركات المصنعة للأجهزة.
- ماسح المنافذ المدمج: اكتشاف الخدمات الاختياري على المضيفين الموجودين (امسح الأجهزة بإذن فقط!).
- وضع الخفي مع واجهة برمجة تطبيقات HTTP: يعمل في الخلفية ويتكامل مع أدوات أخرى.
- السمات والتكوين: خصص المظهر والسلوك عبر ملف تكوين 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
قم بتشغيله كواجهة سطر أوامر لإجراء مسح واحد وعرض النتائج:
whosthere scan -t 5
إخراج النتائج إلى ملف JSON:
whosthere scan -t 5 --json --pretty > devices.json
قم بتشغيله كخفي مع واجهة برمجة تطبيقات HTTP:
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"
التكوين عبر متغيرات البيئة
أي خيار تكوين متاح في ملف تكوين YAML يمكن تعيينه عبر متغيرات البيئة باستخدام البادئة WHOSTHERE__ (لاحظ الشرطة السفلية المزدوجة). يتم فصل مفاتيح التكوين المتداخلة بشرطة سفلية مزدوجة، والمفاتيح غير حساسة لحالة الأحرف.
أمثلة:
WHOSTHERE__SPLASH__ENABLED=false- تعطيل شاشة البداية، أي ما يعادلsplash.enabled: falseفي تكوين YAMLWHOSTHERE__SPLASH__DELAY=2s- ضبط تأخير شاشة البداية إلى ثانيتين، أي ما يعادلsplash.delay: 2sفي تكوين YAMLWHOSTHERE__SCAN_INTERVAL=30s- ضبط فترة المسح إلى 30 ثانية، أي ما يعادلscan_interval: 30sفي تكوين YAMLWHOSTHERE__SCANNERS__MDNS__ENABLED=false- تعطيل ماسح mDNS، أي ما يعادلscanners.mdns.enabled: falseفي تكوين YAMLWHOSTHERE__PORT_SCANNER__TCP=80,443,8080- تعيين منافذ TCP مخصصة للمسح، أي ما يعادلport_scanner.tcp: [80, 443, 8080]في تكوين YAMLWHOSTHERE__THEME__NAME=cyberpunk- تعيين السمة إلى cyberpunk، أي ما يعادلtheme.name: cyberpunkفي تكوين YAML
متغيرات البيئة
متغيرات البيئة العامة
| المتغير | الوصف |
|---|---|
WHOSTHERE_CONFIG | المسار إلى ملف التكوين، لتتمكن من تجاوز الموقع الافتراضي. |
WHOSTHERE_LOG | تعيين مستوى التسجيل (مثل debug, info, warn, error). القيمة الافتراضية info. |
NO_COLOR | تعطيل ألوان ANSI في واجهة TUI. |
وضع الخفي واجهة برمجة تطبيقات HTTP
عند تشغيل Whosthere في وضع الخفي، فإنه يعرض واجهة برمجة تطبيقات HTTP بسيطة جدًا مع نقاط النهاية التالية:
| الطريقة | نقطة النهاية | الوصف |
|---|---|---|
| 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(احتياطي لينكس/ماك)%LOCALAPPDATA%/whosthere/app.log(احتياطي ويندوز)
عند عدم التشغيل في وضع TUI، تتم كتابة السجلات أيضًا إلى وحدة التحكم.
المنصات
Whosthere مدعوم على المنصات التالية:
- Linux
- macOS
- Windows
المشكلات المعروفة
لكي تعمل وظيفة الحافظة، يتم استخدام fork من go-clipboard. تأكد من تثبيت أداة النسخ المناسبة لنظام التشغيل لديك:
| نظام التشغيل | أدوات النسخ المدعومة |
|---|---|
| Darwin | pbcopy |
| Windows | clip.exe |
| Linux/FreeBSD/NetBSD/OpenBSD/Dragonfly | X11: xsel, xclip Wayland: wl-copy |
إخلاء مسؤولية
Whosthere مخصص للاستخدام على الشبكات التي لديك إذن لإجراء اكتشاف ومسح الشبكة عليها، مثل شبكة منزلك الخاصة. قد يكون المسح غير المصرح به للشبكات غير قانوني وغير أخلاقي. احصل دائمًا على الإذن المناسب قبل استخدام هذه الأداة على أي شبكة.
تم إنشاء هذه الأداة بشكل أساسي للأغراض التعليمية واستكشاف الشبكة المنزلية. على الرغم من أنها وظيفية ومفيدة، إلا أنه لا ينبغي اعتبارها حلاً احترافيًا لمراقبة الشبكة. تعتمد النتائج على تقنيات المسح غير المميزة وقد لا تكون شاملة. لتحليل الشبكة الحرج أو تقييمات الأمان، فكر في استخدام أدوات احترافية راسخة مع دعم رسمي.
المساهمة
المساهمات والاقتراحات مثل طلبات الميزات أو تقارير الأخطاء أو التحسينات مرحب بها! لا تتردد في فتح مشكلات أو إرسال طلبات سحب على مستودع GitHub. يرجى التأكد من مناقشة أي تغييرات كبيرة في مشكلة GitHub قبل تنفيذها.