Generování uploadu

Vzorová komunikace klienta s trackerem při seedování

Začátek seedování

Dotaz na tracker:
http://announce.cztorrent.net/announce.php?pid=*&info_hash=*&peer_id=*&port=*&uploaded=0&downloaded=0&left=0&corrupt=0&key=*&event=started&numwant=200&compact=1&no_peer_id=1
Odpověď trackeru:
d8:intervali8765e... To 8765 je za kolik sekund se má klient ohlásit trackeru a prodloužit seedování.

Prodloužení seedování

Dotaz na tracker:
http://announce.cztorrent.net/announce.php?pid=*&info_hash=*&peer_id=*&port=*&uploaded=*&downloaded=0&left=0&corrupt=0&key=*&numwant=200&compact=1&no_peer_id=1
Odpověď trackeru:
d8:intervali9753e... To 9753 je za kolik sekund se má klient ohlásit trackeru a prodloužit seedování.

Ukončení seedování

Dotaz na tracker:
http://announce.cztorrent.net/announce.php?pid=*&info_hash=*&peer_id=*&port=*&uploaded=*&downloaded=0&left=0&corrupt=0&key=*&event=stopped&numwant=0&compact=1&no_peer_id=1
Odpověď trackeru:
d8:intervali8000e... Jen na ověření jestli to tracker přijmul.

Získání údajů

pid= 32 znaků, zjistit jde v nastavení účtu na trackeru
info_hash= 40 znaků, zjistit jde v utorrentu po kliknutí na Kopírovat Magnet URI (jsou to ty znaky za btih)
peer_id= 8 znaků označení klienta + 24 náhodných znaků ze znaků 0123456789abcdef
port= Nějaké 5 místné číslo do 65535
uploaded= Začátek seedování 0, další dotaz podle počtu torrentů, pauzy a max celkové teor. rychlosti (dejme tomu 10 MB/s)
key= 8 náhodných znaků ze znaků 0123456789ABCDEF
Ve všech dotazech dejme tomu v jednom dni se peer_id, port a key nemění i v různých torrentech.
UserAgent: uTorrent/2210(25534)

Získání údajů

info_hash a 24 znaků z peer_id se url enkoduje, např. pomocí prográmku UE

Zdrojový kod UE (autoit)(pokud chcete vlastnoručně zkompilovat):

#include <array.au3>

Func _EncodeHash($sString)

   If (Not IsString($sString)) Or $sString = "" Then Return SetError(1, 0, 0)
   Local $aArray = StringRegExp($sString, "(?s).{1," & 2 & "}", 3), $sEncodedHash
   For $i = 0 To UBound($aArray) -1
      If StringInStr("0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ.-_~", Chr(Dec($aArray[$i]))) Then
         $sEncodedHash &= Chr(Dec($aArray[$i]))
      Else
         $sEncodedHash &= "%" & $aArray[$i]
      EndIf
   Next
   Return $sEncodedHash
EndFunc

$mString = InputBox("UE", "Zadej vstupní řetězec.", "", "", 500, 126)
InputBox("UE", "Výstupní řetězec:", _EncodeHash($mString), "", 500, 126)

Poslání dotazu na tracker

Reálný jednoduchý ruční příklad

pid=26xi4t3yx5brqnz7wf6euatyq82raerq
info_hash=%A0%3B%22V%8D%CE8%A9%28%3A%84m%21%DCu%B2%83vL%06
(A03B22568DCE38A9283A846D21DC75B283764C06 enkodovaný v UE)
peer_id= -UT2210-%11%223DUfw%88%99%aa%bb%cc
(112233445566778899aabbcc enkodovaný v UE)
port=42424
uploaded=0
key=2468AC13

Zobrazit nějaký web glype proxy. Nastavit v něm useragenta. A zobrazit:

http://announce.cztorrent.net/announce.php?pid=26xi4t3yx5brqnz7wf6euatyq82raerq&info_hash=%A0%3B%22V%8D%CE8%A9%28%3A%84m%21%DCu%B2%83vL%06&peer_id=-UT2210-%11%223DUfw%88%99%aa%bb%cc&port=42424&uploaded=0&downloaded=0&left=0&corrupt=0&key=2468AC13&event=started&numwant=200&compact=1&no_peer_id=1

Odpověď bude začínat d8:intervali5361e, hlásit se serveru máme za 5361 sekund. My ale chceme seedovat jen 70 minut, tedy 4200 sekund a tedy prodlužovat seedování se nebude, rovnou se provede ukončení seedování. Hodnotu uploadu nastavíme třeba na 42000000000 B. A po 70 minutách v glype dát zobrazit:

http://announce.cztorrent.net/announce.php?pid=26xi4t3yx5brqnz7wf6euatyq82raerq&info_hash=%A0%3B%22V%8D%CE8%A9%28%3A%84m%21%DCu%B2%83vL%06&peer_id=-UT2210-%11%223DUfw%88%99%aa%bb%cc&port=42424&uploaded=42000000000&downloaded=0&left=0&corrupt=0&key=2468AC13&event=stopped&numwant=0&compact=1&no_peer_id=1
A na trackeru nám přibude 42 GB upload a 59 seedbodů (seedovala se jedna celá hodina s rychlostí vyšší než 201 kB/s s tarifem 59 seedbodů).