NAT64/DNS64-дружелюбный BitTorrent клиент

Что: a3fe5e13b94f046837c3bdf1eae794a5a47250ee

Когда: 2022-11-26 02:19:01+03:00

Темы: bittorrent dns

NAT64/DNS64-дружелюбный BitTorrent клиент

Прежде об этом мыслей у меня не было, но раз теперь у меня в руках
клиент написанный на Go, с довольно простым и понятным кодом, то что мне
мешает сделать его NAT64/DNS64-aware? Ведь только BitTorrent меня и
останавливал (346e0efce2e89ae14cc328bf433d54c9520aa145) от попыток дома
сделать IPv6-only сеть. В Си-шном коде я бы это точно за разумное время
не осилил бы (желание бы пропало прежде).

оставить комментарий

комментарий 0:

From: kmeaw
Date: 2022-11-26 10:46:55Z

> у меня в руках клиент написанный на Go

Если речь про 99545affc42b3298475f3efb7c1fb33db114529b, то стоит быть
аккуратным - этот клиент не умеет раздавать, ожидает от (HTTP-only)
трекера поддержку compact-формата и всегда анонсирует
download=0&upload=0. Такая комбинация особенностей может привести к бану
на трекере.

Ещё часть трекеров сломаются, потому что метод
TorrentFile.buildTrackerURL перезаписывает RawQuery, а туда часто кладут
passkey (?uk=AAAAAAAAAA). Некоторые трекеры также ожидают увидеть в
query-параметрах помимо port ещё и ip/ipv6.

Некоторые трекеры реализуют syncookie-подобную защиту, отвечая клиенту
строкой типа "d14:failure reason10:greylisted8:retry in1:1e" - нужно
уметь обрабатывать ошибки. А иногда отвечают 301 редиректом.

Останется дописать поддержку UDP-трекеров, WebTorrent, перезапрос peers
с трекера (но не чаще, чем раз в interval, иначе забанят), DHT (но с
обработкой private flag, тут тоже могут забанить), peers6 для случая
compact с IPv6, uTP. И, самое сложное, раздачу - пиры могут вести себя
странно и плохо, и надо уметь банить их на своей стороне - трекер тут
ничем не поможе.

комментарий 1:

From: kmeaw
Date: 2022-11-26 10:51:38Z

Прочитал следующую запись в блоге
(8357328821a1a6859a268197a618554b875a87c6) и понял, что был не прав в
своём предположении. Тогда все описанные мной проблемы уже решены.

комментарий 2:

From: Sergey Matveev
Date: 2022-11-26 11:02:03Z

Всё что касается трэкеров меня не сильно волнует. Так как массово все
полагаются на DHT для обнаружения peer-ов. Ну судя по моему опыту. А
на приватных трэкерах я был в последний раз наверное ещё до 2010-х.

Мне не нравится например что он не отправляет трэкеру сообщение о том,
что отключается, когда его останавливают. Конечно на трэкере по
timeout-у мой peer всё равно вычистят, но было бы честнее сообщать.

Ну и да, почти (то что я точно видел в коде и могу оценить) всё что вы
написали -- реализовано. Более того, в документации не упоминается DHT
IPv6 поддержка, но которую я вижу в их dht реализации, которая идёт
отдельной библиотекой.

комментарий 3:

From: Sergey Matveev
Date: 2022-11-26 11:07:25Z


>WebTorrent

А вот это я кстати вообще полностью выпилил. Ну не нравятся мне WebRTC и
WebSocket и всё что с ними связано :-). На треть сокращает размер бинарника
из-за этого.

Сгенерирован: SGBlog 0.34.0