Какое-то время назад я написал для Shareaza внешний DHT Tracker на Lua (GitHub). Для Shareaza это обычный локальный трекер, а по сути это BitTorrent DHT клиент, который позволяет ей качать торенты по магнет ссылкам без трекера.
Так вот, пока клиент работает, он отлавливает пакеты с неизвестными ему полями и сохраняет для дальнейшего анализа (если опция включена).
Итак, что новенького мы наловили в BitTorrent DHT. (Стандартные поля очищены, но оставлены для ясности структуры):
Смотрим что нового:
Все остальное так же, как и в пакете announce_peer, правда отсутствует port, но он здесь очевидно не нужен.
Продираясь через кучу vote, мы натыкаемся на ещё один интересный пакет:
Обычный announce_peer с плюсом в виде названия торрента (см. a.name). Видимо для поисковика или для отображения названия до получения info.
Ищем дальше и находим:
По ID клиента понимаем, что имеем дело уже с Azureus (судя по Wiki это уже Vuze). Так же пришёл к нам announce_peer с плюсом в виде поля seed, которому задан 0. Видимо, данный пир не является сидом говорит КО.
И снова Azureus:
Видим scrape и want. Видимо это аналог Scrape запроса к трекеру. Want является списком и содержит в себе значение «n4». Давно уже мелькало это поле, и я узнал немного про него. N4 это IPv4 адреса а N6 соответственно IPv6 адреса могут быть одновременно.
Это наш сегодняшний улов. Осталось добавить о том что уже добавленно в фильтр пакетов:
В ответах может содержаться дополнительно поле ip. Расследование показало что это ваш собственный ip.
nodes2 — список ipv6 нод насколько я помню. Поскольку мой провайдер всё ещё на ipv4, это вопрос я глубоко не прорабатывал.
Много нового появилось конечно, и в связи с этим у меня появилась идейка дать возможность спрашивать help у самого клиента, который прислал неизвестный пакет.
Выглядит это так:
Запрос
В данном случае это запрос справки по значению q = help.
И на него должен прийти такой ответ:
Возможно дополнительные ссылки лучше в отдельный список выделить.
Ну что ж. Интересующиеся этой темой гуглим подробности, пишем комментарии.
Кстати forum.bittorrent.org у меня не работает. А там обсуждались как раз нововведения BitTorrent клиентов.
P.S. Для Peer-to-Peer кармы не хватает.
P.P.S. Спасибо за карму. Перенёс.
Так вот, пока клиент работает, он отлавливает пакеты с неизвестными ему полями и сохраняет для дальнейшего анализа (если опция включена).
Итак, что новенького мы наловили в BitTorrent DHT. (Стандартные поля очищены, но оставлены для ясности структуры):
{ v="UTct", q="vote", a={ target="", vote=0, token="", id="" }, y="q", t="" }
Смотрим что нового:
- v = «UTct» — Это две буквы ID клиента (в данном случае uTorrent) и версия это 2байта (63 74).
- q = «vote» — Судя по названию это «Голосование».
- vote = 0 — Ну это видимо оценка.
Все остальное так же, как и в пакете announce_peer, правда отсутствует port, но он здесь очевидно не нужен.
Продираясь через кучу vote, мы натыкаемся на ещё один интересный пакет:
{ v="UTdS", q="announce_peer", a={ name="File Name.avi", info_hash="", port=1, id="", token="" }, y="q", t="" }
Обычный announce_peer с плюсом в виде названия торрента (см. a.name). Видимо для поисковика или для отображения названия до получения info.
Ищем дальше и находим:
{ v="Az\5H", q="announce_peer", a={ seed=0, info_hash="", port=1, token="", id="" }, y="q", t="" }
По ID клиента понимаем, что имеем дело уже с Azureus (судя по Wiki это уже Vuze). Так же пришёл к нам announce_peer с плюсом в виде поля seed, которому задан 0. Видимо, данный пир не является сидом говорит КО.
И снова Azureus:
{ v="AZ00", q="get_peers", a={ scrape=1, want={ "n4" }, info_hash="", id="" }, y="q", t="" }
Видим scrape и want. Видимо это аналог Scrape запроса к трекеру. Want является списком и содержит в себе значение «n4». Давно уже мелькало это поле, и я узнал немного про него. N4 это IPv4 адреса а N6 соответственно IPv6 адреса могут быть одновременно.
Это наш сегодняшний улов. Осталось добавить о том что уже добавленно в фильтр пакетов:
{ r={ ip="\0\0\0\0", nodes2={} } y="r" }
В ответах может содержаться дополнительно поле ip. Расследование показало что это ваш собственный ip.
nodes2 — список ipv6 нод насколько я помню. Поскольку мой провайдер всё ещё на ipv4, это вопрос я глубоко не прорабатывал.
Много нового появилось конечно, и в связи с этим у меня появилась идейка дать возможность спрашивать help у самого клиента, который прислал неизвестный пакет.
Выглядит это так:
Запрос
{ t="", y="q", q="help", a={ path={"q","help"} -- Думаю список лучше строки. Раньше была строка в которой имена полей разделялись точкой. } }
В данном случае это запрос справки по значению q = help.
И на него должен прийти такой ответ:
{ t="", y="r", r={ help = [=[ q=[help, ping, find_node, get_peers, announce_peer] help - Micro help about new parameter of dht packet. a.path (query packet) - path to new parameter r.help (responce packet) - help about new parameter more: http://forum.bittorrent.org/viewtopic.php?pid=2134 other see on http://bittorrent.org/beps/bep_0005.html ]=] } }
Возможно дополнительные ссылки лучше в отдельный список выделить.
Ну что ж. Интересующиеся этой темой гуглим подробности, пишем комментарии.
Кстати forum.bittorrent.org у меня не работает. А там обсуждались как раз нововведения BitTorrent клиентов.
P.S. Для Peer-to-Peer кармы не хватает.
P.P.S. Спасибо за карму. Перенёс.