AWDL://CRSE MODULE 05 / 07 TOPIC HANDS-ON STATUS EXEC SIGNAL_LIVE
// MODULE_05 HANDS_ON 5_LABS

المعامل العملية.
لن تفهم AWDL حتى تراه يقفز بين القنوات أمامك.

نفّذ هذه المعامل بالترتيب. كلٌّ منها يبني على سابقه. الهدف ليس النسخ-اللصق، بل أن تشاهد بعينيك كيف يتحوّل كل ما درسته من رسوم في الصفحة إلى إطارات حقيقية في الهواء.

// PRE-FLIGHT_CHECK

كل المعامل تفترض أنك تعمل على شبكتك ومعداتك. لا تشغّل أي شيء هنا في فضاء عام دون إذن. Wi-Fi ليس فضاء حياد قانونياً. كرّر القراءة في الوحدة 6 — الأخلاقيات قبل المتابعة.

5
labs
~120m
total time
1
ath9k card needed
1
apple device nearby

معمل 1 — تجهيز البيئة واختيار العتاد

01
LAB · ENVIRONMENT_BRINGUP

بيئة Linux + بطاقة مؤهّلة

~15 MIN

// الخطوات

  1. ثبّت توزيعة Linux حديثة (Ubuntu/Kali/Arch). تأكّد من نواة حديثة (أدوات mac80211 تتحسّن باستمرار).
  2. احصل على بطاقة ath9k (Atheros AR92xx). تجنّب Intel المدمج و Wi-Fi أجهزة Apple.
  3. تحقّق: iw phy → ابحث عن monitor وactive monitor. إن لم تجد active monitor، غيّر البطاقة.
  4. اختبر الحقن: 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
LAB · CAPTURE_AND_DISSECT

ترى AWDL «حياً»

~25 MIN

// الخطوات

  1. ضع بطاقتك في passive monitor على قناة 5 GHz شائعة لـ AWDL (مثل 44 أو 149):
    capture
    $ sudo iw dev mon0 set channel 44
    $ sudo tcpdump -i mon0 -w awdl.pcap
  2. فعّل AirDrop على جهاز Apple قريب (وضع Everyone) وأرسل/استقبل ملفاً.
  3. افتح 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
  4. شرّح 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
LAB · BECOME_A_NODE

أنت الآن عقدة AWDL حقيقية

~30 MIN

// الخطوات

  1. جهّز واجهة active monitor (راجع الوحدة 4.6).
  2. شغّل OWL؛ راقب السجلّات: هل سمع Master؟ هل تبنّى توقيته (Slave)؟ أم أصبح Master؟
  3. تحقّق من ظهور واجهة 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
LAB · MOMENT_OF_TRUTH

نقل ملف حقيقي بين Linux و Apple

~20 MIN

// الخطوات

  1. على جهاز Apple: AirDrop = Everyone.
  2. على Linux فوق OWL: شغّل opendrop.
  3. أكّد القبول على جهاز 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
LAB · WHEN_IT_BREAKS

دليل تشخيص الأعطال

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 ستوضح لماذا).