http-трекеры (BitTorrent) компактный анализ одноранговых ответов - PullRequest
0 голосов
/ 02 марта 2020

Я пытаюсь создать клиент BitTorrent в dart, и я блокирую получение пиров из ответа сжатого http-трекера.

d8: completei284e10: incompletei3e8: intervali1800e12: минимальный интервал1800e5: peers300: � > v [ч [BZdr + NxZRM% hTDNR չ] 'X

Я прочитал документы, чтобы узнать, как структурирован список сжатых пиров (4 байта для ip и 2 байта для порта ) но я не знаю, как читать эту строку пиров длиной 300 символов ( peers300: ), это logi c, потому что их 50 пиров (50 * (4 + 2)), но в этой строке их 557 символов ( жирный чуть ниже).

[100, 56, 58, 99, 111 , 109, 112, 108, 101, 116, 101, 105, 50, 56, 52, 101, 49, 48, 58, 105, 110, 99, 111, 109, 112, 108, 101, 116, 101, 105 , 51, 101, 56, 58, 105, 110, 116, 101, 114, 118, 97, 108, 105, 49, 56, 48, 48, 101, 49, 50, 58, 109, 105, 110, 32 , 105, 110, 116, 101, 114, 118, 97, 108, 105, 49, 56, 48, 48, 101, 53, 58, 112, 101, 101, 114, 115, 51, 48, 48, 58 239, 191, 189, 239, 191, 189, 239, 191, 189, 239, 191, 189, 62, 239, 191, 189, 239, 191, 189, 239, 191, 189, 25, 118, 6, 239, 191, 189, 91, 239, 191, 189, 104, 239, 191, 189, 239, 191, 189, 91, 239, 191, 189, 22, 66, 239, 191, 189, 90, 239, 191, 189, 239, 191, 189, 100, 114, 43, 239, 191, 189, 78, 239, 191, 189, 120, 239, 191, 189, 19, 239, 191, 189, 239, 191, 189, 90, 82, 239, 191, 189, 77, 37, 239, 191, 189, 104, 239, 191, 189, 239, 191, 189, 239, 191, 189, 84, 239, 191, 189, 239, 191, 189, 68, 6, 3, 78, 239, 191 189, 82, 239, 191, 189, 239, 191, 189, 213, 185, 93, 2, 239, 191, 189, 26, 239, 191, 189, 5, 39, 88, 60, 239, 191 , 189, 239, 191, 189, 88, 121, 48, 53, 239, 191, 189, 239, 191, 189, 78, 239, 191, 189, 96, 239, 191, 189, 239, 191, 189 , 239, 191, 189, 46, 239, 191, 189, 109, 107, 242, 173, 176, 147, 113, 16, 65, 239, 191, 189, 91, 239, 191, 189, 53, 239 , 191, 189, 25, 100, 239, 191, 189, 239, 191, 189, 18, 239, 191, 189, 239, 191, 189, 213, 157, 239, 191, 189, 87, 100, 239 , 191, 189, 61, 80, 239, 191, 189, 213, 178, 239, 191, 189, 239, 191, 189, 5, 239, 191, 189, 239, 191, 189, 10, 26, 239 , 191, 189, 5, 239, 191, 189, 70, 239, 191, 189, 239, 191, 189, 0, 78, 239, 191, 189, 67, 239, 191, 189, 65, 239, 191 , 189, 104, 239, 191, 189, 239, 191, 189, 22, 37, 239, 191, 189, 110, 14, 239, 191, 189, 239, 191, 189, 37, 59, 55, 127 , 239, 191, 189, 239, 191, 189, 5, 239, 191, 189, 239, 191, 189, 239, 191, 189, 239, 191, 189, 213, 185, 45, 195, 184, 78 , 66, 239, 191, 189, 239, 191, 189, 227, 146, 1 61, 239, 191, 189, 64, 20, 51, 85, 239, 191, 189, 239, 191, 189, 195, 154, 239, 191, 189, 93, 239, 191, 189, 239, 191, 189, 37, 239, 191, 189, 112, 239, 191, 189, 239, 191, 189, 213, 185, 104, 239, 191, 189, 5, 239, 191, 189, 239, 191, 189, 104, 239, 191, 189, 239, 191, 189, 82, 8, 87, 65, 10, 239, 191, 189, 101, 239, 191, 189, 91, 109, 239, 191, 189, 8, 239, 191, 189, 239, 191, 189, 37, 239, 191, 189, 17, 14, 239, 191, 189, 68, 78, 239, 191, 189, 48, 112, 22, 239, 191, 189, 54, 38, 46, 239, 191, 189, 239, 191, 189, 239, 191, 189, 81, 239, 191, 189, 125, 239, 191, 189, 239, 191, 189, 239, 191, 189, 239, 191, 189, 239, 191, 189, 239, 191, 189, 19, 239, 191, 189, 90, 89, 239, 191, 189, 94, 209, 131, 98, 213, 152, 239, 191, 189, 239, 191, 189, 239, 191, 189, 24, 92, 239, 191, 189, 239, 191, 189, 29, 65, 239, 191, 189, 78, 239, 191, 189, 120, 117, 239, 191, 189, 19, 37, 59, 39, 48, 239, 191, 189, 213, 185, 21, 239, 191, 189, 58, 239, 191, 189, 88, 239, 191, 189, 239, 191, 189, 90, 54, 239, 191, 189, 82, 46, 239, 191, 189, 109, 239, 191, 189, 99, 115, 95, 239, 191, 189, 239, 191, 189, 239, 191, 189, 239, 191, 189, 239, 191, 189 , 101]

Я нашел 3 знака много раз, но я не знаю, что они представляют.

[239, 191, 189]

Спасибо за ваши ответы.

1 Ответ

0 голосов
/ 02 марта 2020

Не может быть 557 символов, поскольку кодирование четко указывает, что его длина составляет всего 300 байт.

Наиболее вероятная причина такого несоответствия - попытка интерпретировать двоичные данные как строковый тип. Bencoding передает двоичные данные, где только некоторые части интерпретируются как строки. Компактный ответ не является одним из таких случаев.

Вам необходим bdecoder, который возвращает двоичные данные (вместо строк), которые затем можно разрезать на 6-байтовые блоки, представляющие адреса ipv4 и номера портов.

[239, 191, 189]

Это представление Unicode в формате UTF8 Символ замены � (U + FFFD). Это происходит при попытке декодировать двоичные данные как utf8 с помощью декодера, который вместо ошибок вставляет эти символы, когда обнаруживает недопустимые последовательности байтов, а затем снова кодирует результирующие кодовые точки Unicode как UTF 8, чтобы отобразить их в виде массива чисел.

...