Какое-то время назад я написал для 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. Спасибо за карму. Перенёс.
