
عميل TP-Link WiFi SmartPlug ومحلل Wireshark
للقصة الكاملة، راجع هندسة عكسية لـ TP-Link HS110
عميل بلغة Python للبروتوكول الخاص بـ TP-Link Smart Home للتحكم في مقابس TP-Link HS100 وHS110 وKP115 الذكية (WiFi Smart Plugs). يعمل بروتوكول SmartHome على منفذ TCP 9999 ويستخدم تشفيرًا تافهًا يعتمد على XOR بمفتاح تلقائي لا يوفر أي أمان.
لا توجد آلية للمصادقة، ويتم قبول الأوامر بغض النظر عن حالة الجهاز (مُهيأ/غير مُهيأ).
يتم تنسيق الأوامر باستخدام JSON، على سبيل المثال:
{"system":{"get_sysinfo":null}}
بدلاً من null يمكننا أيضًا كتابة {}. يمكن تداخل الأوامر، على سبيل المثال:
{"system":{"get_sysinfo":null},"time":{"get_time":null}}
يتم توفير قائمة كاملة بالأوامر في ملف tplink-smarthome-commands.txt.
./tplink_smartplug.py -t <ip> [-c <cmd> || -j <json>]
قم بتوفير عنوان IP المستهدف باستخدام -t وأمر للإرسال باستخدام إما -c أو
-j. الأوامر الخاصة بالعلامة -c:
يمكن إصدار أوامر أكثر تقدمًا مثل إنشاء أو تحرير القواعد باستخدام العلامة
-j من خلال توفير سلسلة JSON الكاملة للأمر. يُرجى مراجعة
tplink-smarthome-commands.txt للحصول على
قائمة شاملة بالأوامر.
[!TIP] للحصول على طباعة جميلة للرد، استخدم المعامل الهادئ (-q) وقم بتوجيه المخرجات عبر
jqعلى سبيل المثال:./tplink_smartplug.py -t 192.168.178.49 -c info -q | jq
محلل Wireshark لفك تشفير حزم بروتوكول TP-Link Smart Home (منفذ TCP 9999).

[!NOTE]
إذا كان لديك Wireshark > 3.5.0 يمكنك استخدام المحلل المدمج.
انسخ tplink-smarthome.lua إلى:
| نظام التشغيل | مسار التثبيت |
|---|---|
| Windows | %APPDATA%\Wireshark\plugins |
| Linux/MacOS | $HOME/.local/lib/wireshark/plugins |
عميل بلغة Python كدليل على المفهوم للتواصل مع جهاز TP-Link باستخدام بروتوكول تصحيح أجهزة TP-Link (TDDP).
يتم تنفيذ TDDP عبر مجموعة كاملة من أجهزة TP-Link بما في ذلك أجهزة التوجيه ونقاط الوصول والكاميرات والمقابس الذكية. يمكن لـ TDDP قراءة وكتابة تهيئة الجهاز وإصدار أوامر خاصة. يُستخدم منفذ UDP 1040 لإرسال الأوامر، وتأتي الردود على منفذ UDP 61000. تم اختبار هذا العميل مع جهاز توجيه لاسلكي TP-Link Archer C9 ومقبس ذكي TP-Link HS-110.
TDDP هو بروتوكول ثنائي موثق في براءة الاختراع CN102096654A.
يتم إصدار الأوامر عن طريق تعيين القيم المناسبة في حقول الرأس Type و SubType. يتم إرجاع البيانات مشفرة بـ DES وتتطلب اسم المستخدم وكلمة المرور للجهاز لفك التشفير. وبالمثل، يجب إرسال بيانات التهيئة المراد كتابتها إلى الجهاز مشفرة. يتم إنشاء مفتاح DES عن طريق أخذ تجزئة MD5 لاسم المستخدم وكلمة المرور معًا، ثم أخذ أول 8 بايتات من تجزئة MD5.
./tddp-client.py -t <ip> -u username -p password -c 0A
قم بتوفير عنوان IP المستهدف باستخدام -t. يمكنك توفير اسم مستخدم وكلمة مرور، وإلا فسيتم استخدام admin/admin كإعداد افتراضي. وهي ضرورية لفك تشفير البيانات التي يتم إرجاعها.
قم بتوفير الأمر كسلسلة سداسية عشرية مكونة من حرفين، على سبيل المثال -c 0A. سيختلف نوع البيانات التي قد يقرأها الأمر بالنسبة للأجهزة المختلفة من TP-Link.
قراءة حالة رابط WAN على جهاز Archer C9 في التهيئة الافتراضية تظهر أن الرابط معطل (0):
./tddp-client.py -t 192.168.0.1 -c 0E
Request Data: Version 02 Type 03 Status 00 Length 00000000 ID 0001 Subtype 0e
Reply Data: Version 02 Type 03 Status 00 Length 00000018 ID 0001 Subtype 0e
Decrypted: wan_ph_link 1 0
| الأمر | الوصف |
|---|
| antitheft | يسرد قواعد مكافحة السرقة المكونة |
| cloudinfo | يعيد معلومات الاتصال بالسحابة |
| countdown | يسرد قواعد العد التنازلي المكونة |
| energy | يعيد الجهد/التيار/الطاقة في الوقت الفعلي |
| energy_reset | إعادة ضبط عدادات الطاقة |
| info | يعيد معلومات الجهاز |
| ledoff | إيقاف تشغيل مؤشر LED |
| ledon | تشغيل مؤشر LED |
| off | إيقاف تشغيل المقبس |
| on | تشغيل المقبس |
| reboot | إعادة تشغيل الجهاز |
| reset | إعادة ضبط الجهاز إلى إعدادات المصنع |
| runtime_reset | مسح إحصائيات وقت التشغيل |
| schedule | يسرد قواعد الجدولة المكونة |
| time | يعيد وقت النظام |
| wlanscan | مسح نقاط الوصول القريبة |