
TP-Link WiFi 스마트 플러그 클라이언트 및 Wireshark 디섹터
자세한 내용은 TP-Link HS110 리버스 엔지니어링을 참조하세요.
TP-Link HS100, HS110 및 KP115 WiFi 스마트 플러그를 제어하기 위한 독점 TP-Link 스마트 홈 프로토콜의 파이썬 클라이언트입니다. 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] 응답을 예쁘게 출력하려면 quiet 매개변수(-q)를 사용하고 출력을
jq로 파이프하세요. 예:./tplink_smartplug.py -t 192.168.178.49 -c info -q | jq
TP-Link 스마트 홈 프로토콜 패킷(TCP 포트 9999)을 복호화하는 Wireshark 디섹터입니다.

[!NOTE]
Wireshark 3.5.0 이상이 있는 경우 내장 디섹터를 사용할 수 있습니다.
tplink-smarthome.lua 파일을 다음 위치에 복사하세요:
| 운영 체제 | 설치 경로 |
|---|---|
| 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 스마트 플러그로 테스트되었습니다.
TDDP는 특허 CN102096654A에 문서화된 바이너리 프로토콜입니다.
명령은 Type 및 SubType 헤더 필드에 적절한 값을 설정하여 발행됩니다. 데이터는 DES 암호화되어 반환되며 복호화에는 장치의 사용자 이름과 비밀번호가 필요합니다. 마찬가지로 장치에 기록할 구성 데이터는 암호화된 상태로 전송되어야 합니다. DES 키는 사용자 이름과 비밀번호를 연결한 MD5 해시를 취한 후 MD5 해시의 처음 8바이트를 취하여 구성됩니다.
./tddp-client.py -t <ip> -u username -p password -c 0A
-t를 사용하여 대상 IP를 제공합니다. 사용자 이름과 비밀번호를 제공할 수 있으며, 그렇지 않으면 기본적으로 admin/admin이 사용됩니다. 이는 반환된 데이터를 복호화하는 데 필요합니다.
명령은 두 문자 16진수 문자열로 제공합니다(예: -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 | 주변 액세스 포인트를 검색합니다 |