
TP-Link WiFi SmartPlug क्लाइंट और Wireshark डिसेक्टर
पूरी कहानी के लिए देखें Reverse Engineering the TP-Link HS110
मालिकाना 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>]
-t का उपयोग करके लक्ष्य IP प्रदान करें और -c या -j का उपयोग करके एक कमांड भेजें। -c फ़्लैग के लिए कमांड:
-j फ़्लैग का उपयोग करके कमांड के लिए पूर्ण JSON स्ट्रिंग प्रदान करके अधिक उन्नत कमांड (जैसे नियम बनाना या संपादित करना) जारी किए जा सकते हैं। कमांड की व्यापक सूची के लिए कृपया tplink-smarthome-commands.txt देखें।
[!TIP] प्रतिक्रिया को सुंदर प्रिंट करने के लिए, क्वाइट पैरामीटर (-q) का उपयोग करें और आउटपुट को
jqके माध्यम से पाइप करें। उदाहरण के लिए:./tplink_smartplug.py -t 192.168.178.49 -c info -q | jq
TP-Link Smart Home प्रोटोकॉल पैकेट्स (TCP पोर्ट 9999) को डिक्रिप्ट करने के लिए Wireshark डिसेक्टर।

[!NOTE]
यदि आपके पास Wireshark > 3.5.0 है तो आप अंतर्निर्मित डिसेक्टर का उपयोग कर सकते हैं।
tplink-smarthome.lua को इसमें कॉपी करें:
| OS | स्थापना पथ |
|---|---|
| Windows | %APPDATA%\Wireshark\plugins |
| Linux/MacOS | $HOME/.local/lib/wireshark/plugins |
TP-Link डिवाइस डिबग प्रोटोकॉल (TDDP) का उपयोग करके TP-Link डिवाइस से बात करने के लिए एक प्रूफ-ऑफ-कॉन्सेप्ट पायथन क्लाइंट।
TDDP राउटर, एक्सेस पॉइंट, कैमरा और स्मार्टप्लग सहित TP-Link उपकरणों की एक पूरी श्रृंखला में लागू किया गया है। TDDP किसी डिवाइस के कॉन्फ़िगरेशन को पढ़ और लिख सकता है और विशेष कमांड जारी कर सकता है। कमांड भेजने के लिए UDP पोर्ट 1040 का उपयोग किया जाता है, उत्तर UDP पोर्ट 61000 पर आते हैं। इस क्लाइंट का TP-Link Archer C9 वायरलेस राउटर और TP-Link HS-110 WiFi Smart Plug के साथ परीक्षण किया गया है।
TDDP एक बाइनरी प्रोटोकॉल है जो पेटेंट CN102096654A में प्रलेखित है।
कमांड Type और SubType हेडर फ़ील्ड में उपयुक्त मान सेट करके जारी किए जाते हैं। डेटा DES-एन्क्रिप्टेड लौटाया जाता है और डिक्रिप्ट करने के लिए डिवाइस के उपयोगकर्ता नाम और पासवर्ड की आवश्यकता होती है। इसी प्रकार, डिवाइस पर लिखे जाने वाले कॉन्फ़िगरेशन डेटा को एन्क्रिप्टेड भेजने की आवश्यकता होती है। DES कुंजी उपयोगकर्ता नाम और पासवर्ड के MD5 हैश को एक साथ जोड़कर और फिर MD5 हैश के पहले 8 बाइट्स लेकर बनाई जाती है।
./tddp-client.py -t <ip> -u username -p password -c 0A
-t का उपयोग करके लक्ष्य IP प्रदान करें। आप उपयोगकर्ता नाम और पासवर्ड प्रदान कर सकते हैं, अन्यथा डिफ़ॉल्ट रूप से admin/admin का उपयोग किया जाता है। लौटाए गए डेटा को डिक्रिप्ट करने के लिए ये आवश्यक हैं।
कमांड को दो-अक्षर हेक्स स्ट्रिंग के रूप में प्रदान करें, जैसे -c 0A। कोई कमांड किस प्रकार का डेटा पढ़ सकता है, यह विभिन्न TP-Link उपकरणों के लिए अलग-अलग होगा।
Archer C9 पर डिफ़ॉल्ट कॉन्फ़िगरेशन में WAN लिंक स्थिति पढ़ने से लिंक डाउन (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 | पास के एक्सेस पॉइंट्स को स्कैन करता है |