المعامل العملية.
لن تفهم AWDL حتى تراه يقفز بين القنوات أمامك.
نفّذ هذه المعامل بالترتيب. كلٌّ منها يبني على سابقه. الهدف ليس النسخ-اللصق، بل أن تشاهد بعينيك كيف يتحوّل كل ما درسته من رسوم في الصفحة إلى إطارات حقيقية في الهواء.
// PRE-FLIGHT_CHECK
كل المعامل تفترض أنك تعمل على شبكتك ومعداتك. لا تشغّل أي شيء هنا في فضاء عام دون إذن. Wi-Fi ليس فضاء حياد قانونياً. كرّر القراءة في الوحدة 6 — الأخلاقيات قبل المتابعة.
5
labs
~120m
total time
1
ath9k card needed
1
apple device nearby
معمل 1 — تجهيز البيئة واختيار العتاد
01
~15 MIN
// الخطوات
- ثبّت توزيعة Linux حديثة (Ubuntu/Kali/Arch). تأكّد من نواة حديثة (أدوات mac80211 تتحسّن باستمرار).
- احصل على بطاقة ath9k (Atheros AR92xx). تجنّب Intel المدمج و Wi-Fi أجهزة Apple.
- تحقّق:
iw phy→ ابحث عنmonitorوactive monitor. إن لم تجد active monitor، غيّر البطاقة. - اختبر الحقن:
sudo aireplay-ng --test mon0(يجب أن «ينجح» injection test).
lab1: hardware audit
$ uname -r
6.5.0-15-generic
$ iw --version
iw version 5.19
$ sudo iw phy
Wiphy phy0
...
Supported interface modes:
* IBSS
* managed
* monitor
* mesh point
Capability flags:
* RX antenna A
* RX antenna B
...
valid interface combinations:
...
total <= 2, #channels <= 1, STA/AP BI must match,
radar detect widths: { 20 MHz (no HT), 20 MHz, 40 MHz, 80 MHz, 160 MHz },
monitor flags: active control otherbss cook fcsfail mcsfail plcpfail rxerr
$ sudo airmon-ng check kill # تخلّص من NetworkManager/wpa_supplicant
$ sudo iw phy phy0 interface add mon0 type monitor flags active
$ sudo ip link set mon0 up
$ sudo aireplay-ng --test mon0
21:34:51 Trying broadcast probe requests...
21:34:51 Injection is working!
21:34:52 Found 5 APs
21:34:52 Trying directed probe requests...
21:34:53 Ping (min/avg/max): 1.234ms/3.123ms/8.456ms Power: -52.34
21:34:53 30/30: 100%
// PASS_CRITERION
إنشاء mon0 type monitor flags active بدون خطأ + نجاح اختبار الحقن (≥80% replies).
معمل 2 — التقاط وتحليل أطر AWDL
02
~25 MIN
// الخطوات
-
ضع بطاقتك في passive monitor على قناة 5 GHz شائعة لـ AWDL (مثل 44 أو 149):
capture
$ sudo iw dev mon0 set channel 44 $ sudo tcpdump -i mon0 -w awdl.pcap - فعّل AirDrop على جهاز Apple قريب (وضع Everyone) وأرسل/استقبل ملفاً.
-
افتح
awdl.pcapفي Wireshark وطبّق الفلتر:wireshark · display filter
# كل حركة AWDL wlan.bssid == 00:25:00:ff:94:73 # أو إطارات Action فقط wlan.fc.type_subtype == 0x0d && wlan.bssid == 00:25:00:ff:94:73 # ابحث عن OUI = 00:17:F2 داخل Vendor-Specific wlan.fixed.publicaction == 0x09 - شرّح TLVs يدوياً: حدّد Sync Params (
0x04)، Election Params (0x05)، Channel Sequence (0x12).
// CAVEAT
لأن AWDL يقفز بين قنوات، التقاطك على قناة واحدة سيرى «شذرات» فقط. للالتقاط الشامل تحتاج قفزاً متزامناً (وهو ما يفعله OWL) أو عدة بطاقات على قنوات مختلفة.
// PASS_CRITERION
عزل إطارات AWDL، وتحديد الـ Master الحالي من Election params، وقراءة جدول القنوات من Channel Sequence TLV.
معمل 3 — تشغيل OWL والانضمام للشبكة
03
~30 MIN
// الخطوات
- جهّز واجهة active monitor (راجع الوحدة 4.6).
- شغّل OWL؛ راقب السجلّات: هل سمع Master؟ هل تبنّى توقيته (Slave)؟ أم أصبح Master؟
- تحقّق من ظهور واجهة
awdl0بعنوان IPv6 link-local.
lab3 · OWL bringup
$ sudo owl -i mon0 -v
[awdl] starting channel sequence: 44 → 149 → 6 → 44 → ...
[awdl] BSSID = 00:25:00:ff:94:73
[awdl] no master heard in 200ms, becoming MASTER
[awdl] heard peer ac:bc:32:** metric=510 (higher than mine=80)
[awdl] demoting to SLAVE; adopting peer's TSF
[awdl] TSF adjusted by +14882 µs
[awdl] awdl0 up — fe80::a8bb:ccff:fe11:2233/64
$ ip -6 addr show awdl0
4: awdl0: <BROADCAST,MULTICAST,UP> mtu 1500 ...
inet6 fe80::a8bb:ccff:fe11:2233/64 scope link
valid_lft forever preferred_lft forever
$ ping6 -I awdl0 ff02::1 # neighbor discovery on AWDL link
PING ff02::1(ff02::1) from fe80::a8bb:... awdl0: 56 data bytes
64 bytes from fe80::ae3d:82ff:fe1c:9912: icmp_seq=1 ttl=64 time=11.7 ms
64 bytes from fe80::1c80:7fff:fe6e:2c11: icmp_seq=1 ttl=64 time=8.2 ms
--- neighbors found: 2 alive
// PASS_CRITERION
رؤية جيران IPv6 (أجهزة Apple) عبر awdl0، ونجاح ping6 لعنوان link-local لجهاز Apple.
معمل 4 — إرسال/استقبال ملف عبر OpenDrop
04
~20 MIN
// الخطوات
- على جهاز Apple: AirDrop = Everyone.
- على Linux فوق OWL: شغّل
opendrop. - أكّد القبول على جهاز Apple.
lab4 · file transfer
## terminal A — keep OWL alive
$ sudo owl -i mon0
## terminal B — discover nearby AirDrop devices
$ opendrop find
Looking for receivers. Press Ctrl+C to stop search.
Found index=0 ID=4F2A19BB name="Khaled's iPhone"
Found index=1 ID=28FC4D9A name="MacBook Pro"
## send a file
$ opendrop send -r 0 -f payload.bin
Asking receiver to accept ...
<tap Accept on Apple device>
Receiver accepted
Uploading file ...
[####################] 100% 2.4 MB / 2.4 MB
Uploading has been successful
## or receive
$ opendrop receive
Listening on 0.0.0.0:8770 ...
<send a file FROM the iPhone>
Received file: kitten.jpg (148.2 KB)
saved to ./kitten.jpg
// PASS_CRITERION
وصول ملف من/إلى جهاز Apple فعلياً. لو فعلت هذا، فقد استنسخت AirDrop من الصفر على عتاد غير Apple.
معمل 5 — التشخيص (Troubleshooting playbook)
05
REFERENCE
| العَرَض | السبب الأرجح | الفحص / الحل |
|---|---|---|
| لا ترى أي إطار AWDL | قناة خاطئة / لا قفز | بدّل القنوات؛ شغّل OWL ليقفز متزامناً |
| ترى الإطارات لكن لا أحد «يراك» | لا ACK (passive فقط) | تأكّد من active monitor؛ افحص NL80211_MNTR_FLAG_ACTIVE |
| الواجهة تعود managed تلقائياً | NetworkManager / wpa_supplicant | airmon-ng check kill ثم أعد التهيئة |
ping6 يفشل |
لم تثبت المزامنة / TSF منجرف | راقب سجلّ OWL؛ تحقّق من ثبات القفز |
| AirDrop لا يكتشفك | وضع Contacts Only على Apple | اضبطه Everyone؛ Contacts Only يحتاج شهادات |
| حقن يفشل على قناة معيّنة | قيود DFS/تنظيمي | iw reg set <CC>؛ تجنّب قنوات DFS |
| OWL ينهار عشوائياً | إصدار kernel/firmware | حدّث linux-firmware؛ جرّب kernel أحدث |
| اتصال AP العادي ينقطع عند تشغيل OWL | تعارض على نفس الراديو | استخدم دونجل USB منفصل لـ OWL |
| نقل بطيء جداً | إشارة ضعيفة / تداخل | قرّب الجهازين؛ ابتعد عن 2.4 GHz |
// أوامر تشخيص مفيدة
diagnostics
# شاهد إحصائيات الواجهة لحظياً
$ watch -n1 iw dev mon0 station dump
# شاهد حركة AWDL على الواجهة المنطقية
$ sudo tcpdump -i awdl0 -nn -X
# تتبّع أحداث nl80211 لحظياً
$ iw event -f
# شاهد ما يفعله OWL داخلياً
$ sudo strace -e trace=network -p $(pgrep owl)
# أعد ضبط المجال التنظيمي
$ sudo iw reg set US
$ sudo iw reg get
قبل أن تتقدم
- أكملتُ المعمل 1 بنجاح injection.
- التقطتُ إطار AWDL واحداً على الأقل وحلّلتُ TLV واحداً يدوياً.
- رأيتُ OWL يبدّل بين MASTER و SLAVE في السجلات.
- نجح
ping6لجار Apple واحد على الأقل. - نقلتُ ملفاً بنجاح (إن لم يكن، فلتلا أمر طبيعي — الوحدة 6 ستوضح لماذا).