Прежде об этом мыслей у меня не было, но раз теперь у меня в руках клиент написанный на Go, с довольно простым и понятным кодом, то что мне мешает сделать его NAT64/DNS64-aware? Ведь только BitTorrent меня и останавливал (346e0efce2e89ae14cc328bf433d54c9520aa145) от попыток дома сделать IPv6-only сеть. В Си-шном коде я бы это точно за разумное время не осилил бы (желание бы пропало прежде).
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. И, самое сложное, раздачу - пиры могут вести себя странно и плохо, и надо уметь банить их на своей стороне - трекер тут ничем не поможе.
From: kmeaw Date: 2022-11-26 10:51:38Z Прочитал следующую запись в блоге (8357328821a1a6859a268197a618554b875a87c6) и понял, что был не прав в своём предположении. Тогда все описанные мной проблемы уже решены.
From: Sergey Matveev Date: 2022-11-26 11:02:03Z Всё что касается трэкеров меня не сильно волнует. Так как массово все полагаются на DHT для обнаружения peer-ов. Ну судя по моему опыту. А на приватных трэкерах я был в последний раз наверное ещё до 2010-х. Мне не нравится например что он не отправляет трэкеру сообщение о том, что отключается, когда его останавливают. Конечно на трэкере по timeout-у мой peer всё равно вычистят, но было бы честнее сообщать. Ну и да, почти (то что я точно видел в коде и могу оценить) всё что вы написали -- реализовано. Более того, в документации не упоминается DHT IPv6 поддержка, но которую я вижу в их dht реализации, которая идёт отдельной библиотекой.
From: Sergey Matveev Date: 2022-11-26 11:07:25Z *** kmeaw [2022-11-26 10:46]: >WebTorrent А вот это я кстати вообще полностью выпилил. Ну не нравятся мне WebRTC и WebSocket и всё что с ними связано :-). На треть сокращает размер бинарника из-за этого.