[О блоге] [наверх] [пред] [2022-11-26 02:19:01+03:00] [a3fe5e13b94f046837c3bdf1eae794a5a47250ee]
Темы: [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
    
    *** kmeaw [2022-11-26 10:46]:
    >WebTorrent
    
    А вот это я кстати вообще полностью выпилил. Ну не нравятся мне WebRTC и
    WebSocket и всё что с ними связано :-). На треть сокращает размер бинарника
    из-за этого.