Я пытаюсь выяснить стек API этой камеры tplink C200, он не общедоступен. Я мог относительно легко вычислить большинство вызовов Api с помощью fiddler и Wireshark, но немного двоичного кадра в начале вызова обнаружения сбивает меня с толку.
Приложение камеры android начинает транслировать этот пакет udp на 255.255.255.255, как только пользователь вошел в систему в первый раз:
0000 ff ff ff ff ff ff 20 4e 7f d9 64 3e 08 00 45 00 ...... N..d>..E.
0010 02 11 08 88 40 00 40 11 b0 46 c0 a8 bf 65 ff ff ....@.@..F...e..
0020 ff ff cd ed 4e 22 01 fd 1e c3 02 00 00 01 01 e5 ....N"..........
0030 11 00 08 34 d4 be c1 46 b6 89 7b 22 70 61 72 61 ...4...F..{"para
0040 6d 73 22 3a 7b 22 72 73 61 5f 6b 65 79 22 3a 22 ms":{"rsa_key":"
0050 2d 2d 2d 2d 2d 42 45 47 49 4e 20 50 55 42 4c 49 -----BEGIN PUBLI
0060 43 20 4b 45 59 2d 2d 2d 2d 2d 5c 6e 4d 49 49 42 C KEY-----\nMIIB
0070 49 6a 41 4e 42 67 6b 71 68 6b 69 47 39 77 30 42 IjANBgkqhkiG9w0B
0080 41 51 45 46 41 41 4f 43 41 51 38 41 4d 49 49 42 AQEFAAOCAQ8AMIIB
0090 43 67 4b 43 41 51 45 41 33 72 4e 70 4f 66 6b 59 CgKCAQEA3rNpOfkY
00a0 35 35 4d 6a 32 62 6c 77 4e 39 6d 30 5c 6e 62 56 55Mj2blwN9m0\nbV
00b0 50 72 79 76 32 37 68 6c 61 7a 6f 46 37 78 4d 55 Pryv27hlazoF7xMU
00c0 46 4f 46 57 6b 62 63 61 6f 4a 41 67 6e 52 79 45 FOFWkbcaoJAgnRyE
00d0 36 42 56 30 77 70 47 71 68 79 4f 69 49 4f 72 34 6BV0wpGqhyOiIOr4
00e0 35 50 49 55 74 62 54 51 52 45 44 56 34 75 5c 6e 5PIUtbTQREDV4u\n
00f0 2b 4b 6f 55 75 6b 41 4c 71 6c 2f 42 42 6b 41 34 +KoUukALql/BBkA4
0100 76 67 6a 67 4f 55 45 30 79 53 74 36 74 77 61 79 vgjgOUE0ySt6tway
0110 6a 2b 6b 33 73 6e 6b 2f 56 70 49 6a 61 44 74 36 j+k3snk/VpIjaDt6
0120 32 6f 33 62 35 70 6e 44 4b 45 68 48 4c 56 45 66 2o3b5pnDKEhHLVEf
0130 5c 6e 79 6c 4a 30 6b 45 6e 58 4e 43 54 35 68 73 \nylJ0kEnXNCT5hs
0140 6b 64 68 39 66 59 38 78 74 6d 62 42 6d 57 31 47 kdh9fY8xtmbBmW1G
0150 2b 6e 54 6c 30 73 43 47 54 2f 75 75 77 65 31 6b +nTl0sCGT/uuwe1k
0160 74 67 45 78 7a 70 43 67 57 77 62 75 71 78 49 49 tgExzpCgWwbuqxII
0170 47 54 5c 6e 66 63 58 31 79 52 6d 54 73 77 37 53 GT\nfcX1yRmTsw7S
0180 66 73 5a 71 58 4f 61 39 50 6f 36 62 68 65 73 48 fsZqXOa9Po6bhesH
0190 4e 78 4c 33 48 53 52 35 72 43 6f 73 6f 6f 72 75 NxL3HSR5rCosooru
01a0 34 7a 67 71 6a 6b 64 62 42 2f 57 2b 46 71 6d 35 4zgqjkdbB/W+Fqm5
01b0 42 6d 71 50 5c 6e 44 51 75 4c 6b 49 6c 4c 4a 2b BmqP\nDQuLkIlLJ+
01c0 34 56 32 71 35 63 48 41 73 67 4d 54 38 48 52 78 4V2q5cHAsgMT8HRx
01d0 31 5a 74 50 75 55 54 78 45 49 66 55 49 4e 58 64 1ZtPuUTxEIfUINXd
01e0 41 57 67 4b 36 75 4d 75 4e 74 4d 4e 5a 56 4f 50 AWgK6uMuNtMNZVOP
01f0 6b 2f 71 54 31 30 5c 6e 72 51 49 44 41 51 41 42 k/qT10\nrQIDAQAB
0200 5c 6e 2d 2d 2d 2d 2d 45 4e 44 20 50 55 42 4c 49 \n-----END PUBLI
0210 43 20 4b 45 59 2d 2d 2d 2d 2d 5c 6e 22 7d 7d 00 C KEY-----\n"}}.
он гаснет с интервалами, пока камера не ответит. Я попытался имитировать пакет, и мне это не удалось, потому что я не мог реплицировать эти байты (начало кадра данных):
(002B-> 003A): 02 00 00 01 01 e5 11 00 08 34 d4 be c1 46 b6 89
Как вы заметили, сразу после этого начинается читаемое сообщение ASCII ({"params": ...), я повторил шаги обнаружения несколько раз и заметил, что эти байты каким-то образом связаны с локальный связанный порт на стороне приложения, через который отправляется сообщение об обнаружении udp, вот примеры, которые я собрал:
Frame in udp packet port
0200000101e511000d554fad4de6fb2b 49411
0200000101e5110003ef2ad6767c88ee 49417
0200000101e511000c74622ed5e0246e 50248
0200000101e511000376feec3ed43466 50260
0200000101e51100046c5d74ee1a8de1 50797
0200000101e5110000503e7aa816e491 50802
0200000101e511000fdfc58e766d3742 52169
0200000101e511000e13aaabcd1a38ba 52332
0200000101e511000834d4bec146b689 52717
0200000101e511010000027822e38756 52956
0200000101e5110003e10659047571be 53370
0200000101e511000cbad8000079daf0 53500
0200000101e5110002e5bc217cb12739 57161
0200000101e511000922aa242d80ae84 58170
0200000101e511000d8945e5e21b2265 58421
0200000101e511000f97146569f2cbfe 58425
0200000101e511000d66c663c5ac4d69 59985
0200000101e511000105947d8d9e16f9 61818
0200000101e511000c9ed77f9024d65f 61879
0200000101e5110008b9a7fbc1624863 61927
0200000101e511000b3d5323ee84b6b7 62182
0200000101e511000f7b9b183a81ff80 62996
0200000101e511000da2e8028da2f46a 63043
0200000101e5110000c4390fbdc258e2 63046
Я не могу найти связь, я пробовал несколько разных протоколов IoT и методов хеширования, Кто-нибудь знаете, что это такое или как они рассчитываются?
PS Номер порта каким-то образом закодирован внутри этих фреймов, это должно быть промышленное кодирование, просто ha sh или шифрование xor. Есть идеи?