
htop للموجات اللاسلكية — لوحة تحكم مباشرة للترددات الراديوية 802.11 (Wi-Fi) في الطرفية
htop لموجات الأثير — لوحة تحكم مباشرة لترددات الراديو 802.11 (Wi-Fi) في طرفيتك.
يحوّل airtop حركة مرور Wi-Fi من حولك إلى لوحة تحكم مباشرة في الطرفية — طيف ترددات لنقاط الوصول القريبة، ومسارات إشارة لكل محطة، وتغذية نشاط بأنواع الإطارات، ومدرّج تكراري لـ RSSI، وقائمة متجددة بالشبكات المكتشفة — مرسومة برسوم برايل والكتل عبر eBPF.
[!TIP] لا حاجة لوضع المراقبة ولا للمقابس الخام. يربط airtop برامج eBPF بـ
mac80211/cfg80211ويقرأ إطارات 802.11 أثناء مرورها عبر مكدس Wi-Fi في النواة، لذلك يعمل على واجهتك العادية المتصلة دون قطع اتصالك.
curl -fsSL https://yeet.cx | sh
yeet run https://github.com/yeet-src/airtop
للحصول على لقطة شاشة قابلة للمشاركة، أخفِ أسماء الشبكات SSID وعناوين MAC (تُعاد تسمية شبكتك وشبكات جيرانك إلى network-01 وstation-02، وهكذا):
yeet run https://github.com/yeet-src/airtop -- --anonymize
يعمل حتى تضغط Ctrl-C. إذا غيّرت حجم الطرفية يُعاد توزيع التخطيط تلقائيًا؛ الحد الأدنى 80×24.
لإظهار الشبكات المجاورة تحتاج النواة إلى نتائج الفحص. نظام تشغيلك يفحص دوريًا من تلقاء نفسه، أو يمكنك فرض فحص:
nmcli dev wifi rescan # أو: iw dev <iface> scan
Wi-Fi هي عائلة معايير IEEE 802.11. النموذج الذهني:
كل شيء إطار. يتبادل حاسوبك المحمول وهاتفك وموجّهك حزم راديو قصيرة تُسمّى إطارات. يحمل كل إطار عناوين MAC، وأحدها (هو BSSID) يحدد نقطة الوصول التي ينتمي إليها.
ثلاث فئات من الإطارات:
| الفئة | أمثلة | الغرض |
|---|---|---|
| إدارية | Beacon, Probe, Auth, Assoc, Deauth | الإعلان عن الشبكات والانضمام إليها ومغادرتها |
| تحكم | ACK, RTS/CTS | التنسيق حول من يحق له الإرسال |
| بيانات | حركة مرورك الفعلية | حمل الحمولة |
نقاط الوصول تبثّ المنارات. تعلن نقطة الوصول عن نفسها حوالي 10 مرات في الثانية عبر إطار منارة (beacon) يحمل اسم الشبكة (SSID) وBSSID. هكذا تُملأ قائمة Wi-Fi في هاتفك، وهكذا يكتشف airtop نقاط الوصول.
القنوات والتردد. تعيش Wi-Fi في نطاقات (2.4 GHz و5 GHz و6 GHz)، وينقسم كل نطاق إلى قنوات، وكل قناة هي تردد مركزي بوحدة MHz (القناة 6 ≈ 2437 MHz، القناة 161 ≈ 5805 MHz). يستمع الراديو إلى قناة واحدة في كل مرة، ولهذا ترى غالبًا حركة المرور على قناتك أنت.
قوة الإشارة (RSSI) تُقاس بوحدة dBm. القيم دائمًا سالبة، وكلما اقتربت من الصفر كانت أقوى:
| RSSI | الجودة |
|---|---|
| −30 … −50 dBm | ممتازة (بجوارك مباشرة) |
| −50 … −67 dBm | جيدة |
| −67 … −80 dBm | صالحة للاستخدام |
| −80 … −90 dBm | ضعيفة / حدّية |
غالبًا مستخدمون منزليون يتحرّون سبب ضعف Wi-Fi، ومشرفو شبكات يختارون القنوات قبل حدث مهم.
كل لوحة تعكس المفاهيم أعلاه:
الترويسة — مدة التشغيل، إجمالي الإطارات المرصودة، المحطات النشطة، نقاط الوصول المكتشفة، عدد المنارات، عدد إطارات Deauth (يظهر بالأحمر إن كان أي منها غير صفري)، وقناتك الحالية. عدّاد Deauth هو ما يجب أن تراقبه؛ الشبكات السليمة قيمتها صفر.
طيف الترددات — كل نقطة وصول مكتشفة تُرسم كـ«سنام» إشارة في موضع ترددها المركزي الفعلي على محور MHz. الارتفاع واللون يعرضان RSSI؛ والتسمية هي SSID + dBm. تتداخل السنامات فتكشف ازدحام القناة المشتركة — العرض الكلاسيكي لمحللات Wi-Fi، والإجابة على سؤال «لماذا الواي فاي بطيء؟».
RSSI × الزمن — رسم بياني خطي بطريقة برايل لكل محطة نشطة ويوضّح إشارتها خلال الثواني القليلة الماضية. راقب ضعف الاتصال عندما يبتعد جهاز عن نقطة الوصول، أو قفزة الإشارة عندما يحرّك شخص حاسوبه المحمول.
تغذية الإطارات — خريطة حرارية لأنواع الإطارات عبر الزمن؛ لون الخلية = عدد الإطارات من ذلك النوع التي وصلت في الشريحة. فيضان Deauth يُضيء هذا الصف فورًا، وهو نمط التنبيه الذي تريده فعلًا.
مدرّج الإشارة — توزيع الإطارات المستلَمة حسب RSSI. «شكل» بيئة الترددات الراديوية لديك: ذروة ضيقة حول −50 dBm تعني أنك قريب من نقطة وصول قوية واحدة، أما التوزع المنتشر بين −60 و−80 فيعني بيئة مزدحمة.
نقاط الوصول — أسماء SSID المكتشفة مع القناة ومقياس الإشارة وdBm، مرتبة من الأقوى إلى الأضعف.
كائن BPF واحد (airtop.bpf.c) يربط برنامجَي fentry ويبثّ الأحداث إلى مساحة المستخدم عبر مخازن مؤقتة دائرية (ring buffers):
| الخطاف | ما يلتقطه |
|---|---|
fentry/ieee80211_rx_list | كل إطار 802.11 مُستلَم: النوع/النوع الفرعي، العناوين، RSSI من ieee80211_rx_status |
fentry/cfg80211_inform_bss_frame_data | كل نقطة وصول تكتشفها فحوصات النواة: SSID، القناة، قوة الإشارة |
تعمل لوحة التحكم في بيئة تشغيل V8 الخاصة بـ yeet، وتشترك في تلك الحلقات وتعرض واجهة الطرفية:
main.js entry: tty size, render loop, BPF bind/subscribe
state.js live data + frame/scan ingest
render.js ANSI, color ramps, braille canvas/charts (pure)
dashboard.js panels + layout (renderDashboard)
[!IMPORTANT] لينكس مع BTF:
CONFIG_DEBUG_INFO_BTF=yوCONFIG_DEBUG_INFO_BTF_MODULES=y. هذا افتراضي في توزيعات Arch وFedora وUbuntu وDebian 12+ الحالية. معمارية CO-RE تعني عدم الحاجة إلى إعادة ترجمة لكل نواة.
cfg80211/mac80211 القياسي (أي بطاقة Wi-Fi عادية على لينكس).curl -fsSL https://yeet.cx | sh يثبّتها.[!NOTE] ما لا يفعله airtop:
- الواجهة المتصلة تسمع فقط قناتها الخاصة بالإضافة إلى ما تلمسه الفحوصات القصيرة، لذلك يمتلئ الطيف وقائمة نقاط الوصول أثناء عمل الفحوصات، وحركة الإطارات الحية تكون في معظمها على قناتك. المسح الكامل للنطاق يتطلب وضع مراقبة + تنقّلًا بين القنوات.
- يعدّ الإطارات لا البايتات. «النشاط» هو عدد الإطارات، وليس زمن البث.
- لا يلتقط معدل الإرسال TX ولا عمليات إعادة الإرسال. ذلك خطاف
tx_statusمنفصل.- أهداف
fentryمستقرة عمليًا لكنها ليست واجهة ثنائية (ABI) للنواة؛ البيانات الدقيقة تعتمد على برنامج تشغيل Wi-Fi لديك.
هل يتطلب هذا وضع المراقبة؟ لا. هذا هو جوهر الفكرة. يربط airtop مكدس Wi-Fi في النواة من الداخل، لذلك يعمل على واجهتك العادية المتصلة.
هل سيقطع اتصالي؟ لا. لا يوجد تبديل للأوضاع؛ تبقى واجهتك مرتبطة بما هي مرتبطة به. airtop يراقب ما تفعله النواة أصلًا.
لماذا أرى شبكة أو شبكتين فقط؟
لأن راديوك يستمع إلى قناة واحدة (قناته) معظم الوقت. الشبكات المجاورة تظهر عندما يجري نظام تشغيلك فحوصات دورية، أو عندما تفرض فحصًا بـ nmcli dev wifi rescan / iw dev <iface> scan. المسح الكامل للنطاق يتطلب وضع مراقبة + تنقّلًا بين القنوات، وهذا أداة مختلفة.
هل هذا قانوني؟ المراقبة السلبية لإطارات 802.11 في الهواء من حولك قانونية في معظم الدول؛ راديوك يستقبلها أصلًا، وairtop يعرض لك ما هو موجود فقط. أما التداخل النشط (لوحة Deauth تكشف الهجمات ولا تنفّذها) فقصة مختلفة. إذا كنت على شبكة شركة، راجع سياسة الاستخدام المقبول AUP لديك.
كيف يختلف عن Kismet أو airodump-ng أو Wireshark؟ تلك الأدوات تفعل أكثر مع وضع المراقبة: التقاط كامل لكل إطار، وتصدير PCAP، وفك تشفير. أما airtop فيعمل على واجهتك العادية ويمنحك لوحة تحكم بنظرة واحدة. لاختبار الاختراق استخدم airodump-ng. ولمعرفة سبب انقطاع مكالمتك استخدم هذا.
make # generates include/vmlinux.h, builds bin/airtop.bpf.o
make vmlinux # force-refresh the kernel type header
make clean
يتطلب clang (هدف BPF) وbpftool؛ بالإضافة إلى حزم libbpf / libbpf-dev في توزيعتك للحصول على الترويسات. الملفان المولّدان include/vmlinux.h وbin/ مستثنيان من git.
يُنتَج ملف GIF باستخدام VHS من assets/airtop.tape:
vhs assets/airtop.tape # -> assets/airtop.gif
يُشغّل airtop خارج الكاميرا ليبدأ ملف GIF على لوحة التحكم الحية. شغّل فحوصات Wi-Fi في طرفية أخرى أثناء التسجيل لملء الطيف وقائمة نقاط الوصول.
برنامج BPF مرخّص بـ GPL (SEC("license") = "GPL") كما تتطلب دوال النواة التي يستخدمها.
مبني بواسطة yeet. yeet هي بيئة تشغيل لينكس لكتابة برامج eBPF ولوحات تحكم نظام حية بلغة JavaScript.