Gå til innhold

Hjelp med torrent tracker


Anbefalte innlegg

Heisann

 

Først og fremst les dette om dere tror jeg strider mot regelverket:

Klikk for å se/fjerne innholdet nedenfor

Har snakket med moderator om og få ha denne tråden. Og det skulle jeg få lov til, så lenge det gikk i lovlig innhold, altså, ikke linking til ting som kan medføre ulovlig piratvirksomhet..

Trackeren min er kun ment som et ekperiment, og vil aldri bli brukt til no ulovlig, men skulle den bli brukt, vil dette være ting som er lovlig..

Skulle det være spørsmål vennligst send med en PM

 

Jeg trenger altså hjelp med torrent trackeren min, og håper noen her inne har erfaringer med dette på et eller annet vis..

 

Det jeg har problemer med er at i torrent programmet får jeg feilen "invalid data from tracker" noe som betyr at det er feil i koden en eller annen plass..

 

Jeg er ikke sikker på om alle funksjonene er rett, men resten helt ned til der den skjekker ip adresse i bruker tabellen er rett, for jeg fikk error rett derifra når IP adressen min ikke fungerte. Så det er under der problemet ligger tror jeg, eventuelt i en funksjon lenger oppe..

 

Leger ved announce.php fila slik at dere kan se på den

 

Klikk for å se/fjerne innholdet nedenfor

<?php

ob_start("ob_gzhandler") or err('feil0');

function benc_resp_raw($x)
{
header("Content-Type: text/plain");
header("Pragma: no-cache");
print($x);
}

function benc_resp($d)
{
benc_resp_raw(benc(array(type => "dictionary", value => $d)));
}

function err($msg)
{
benc_resp(array("failure reason" => array(type => "string", value => $msg)));
exit();
}

$index = true;
include('/var/www/chill/torrent_inc/benc.php');
include('/var/www/chill/config.php');

//midlertig els
function unesc($x) {
   if (get_magic_quotes_gpc())
       return stripslashes($x);
   return $x;
}

function getip() {
  if (isset($_SERVER)) 
{
    if (isset($_SERVER['HTTP_X_FORWARDED_FOR']) && validip($_SERVER['HTTP_X_FORWARDED_FOR'])) {
      $ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
    } elseif (isset($_SERVER['HTTP_CLIENT_IP']) && validip($_SERVER['HTTP_CLIENT_IP'])) {
      $ip = $_SERVER['HTTP_CLIENT_IP'];
    } else {
      $ip = $_SERVER['REMOTE_ADDR'];
    }
  } else {
    if (getenv('HTTP_X_FORWARDED_FOR') && validip(getenv('HTTP_X_FORWARDED_FOR'))) {
      $ip = getenv('HTTP_X_FORWARDED_FOR');
    } elseif (getenv('HTTP_CLIENT_IP') && validip(getenv('HTTP_CLIENT_IP'))) {
      $ip = getenv('HTTP_CLIENT_IP');
    } else {
      $ip = getenv('REMOTE_ADDR');
    }
  }

  return $ip;
}

function hash_pad($hash) {
   return str_pad($hash, 20);
}

function sqlesc($x) {
   return "'".mysql_real_escape_string($x)."'";
}

function hash_where($name, $hash) {
   $shhash = preg_replace('/ *$/s', "", $hash);
   return "($name = " . sqlesc($hash) . " OR $name = " . sqlesc($shhash) . ")";
}

////////////////

$req = "info_hash:peer_id:!ip:port:uploaded:downloaded:left:!event";
foreach (explode(":", $req) as $x)
{
if ($x[0] == "!")
{
 $x = substr($x, 1);
 $opt = 1;
}
else
 $opt = 0;
if (!isset($_GET[$x]))
{
 if (!$opt)
 	err("missing key");
 continue;
}
$GLOBALS[$x] = unesc($_GET[$x]);
}

foreach (array("info_hash","peer_id") as $x)
{
if (strlen($GLOBALS[$x]) != 20)
 err("invalid $x (" . strlen($GLOBALS[$x]) . " - " . urlencode($GLOBALS[$x]) . ")");
}

if (empty($ip) || !preg_match('/^(\d{1,3}\.){3}\d{1,3}$/s', $ip))
$ip = getip();

$port = 0 + $port;
$downloaded = 0 + $downloaded;
$uploaded = 0 + $uploaded;
$left = 0 + $left;

$rsize = 50;
foreach(array("num want", "numwant", "num_want") as $k)
{
if (isset($_GET[$k]))
{
 $rsize = 0 + $_GET[$k];
 break;
}
}

$agent = $_SERVER["HTTP_USER_AGENT"];

// Deny access made with a browser...
//if (ereg("^Mozilla\\/", $agent) || ereg("^Opera\\/", $agent) || ereg("^Links ", $agent) || ereg("^Lynx\\/", $agent))
//	err("torrent not registered with this tracker");

if (!$port || $port > 0xffff)
err("invalid port");

if (!isset($event))
$event = "";

$seeder = ($left == 0) ? "yes" : "no";

$res = mysql_query("SELECT id, banned, seeders + leechers AS numpeers, UNIX_TIMESTAMP(added) AS ts FROM torrents WHERE " . hash_where("info_hash", $info_hash)) or err("bad SQL query1");

$torrent = mysql_fetch_assoc($res);
if (!$torrent)
err("torrent not registered with this tracker");

$torrentid = $torrent["id"];

$fields = "seeder, peer_id, ip, port, uploaded, downloaded, userid";

$numpeers = $torrent["numpeers"];
$limit = "";
if ($numpeers > $rsize)
$limit = "ORDER BY RAND() LIMIT $rsize";
$res = mysql_query("SELECT $fields FROM peers WHERE torrent = $torrentid AND connectable = 'yes' $limit");

$resp = "d" . benc_str("interval") . "i" . $announce_interval . "e" . benc_str("peers") . "l";
unset($self);
while ($row = mysql_fetch_assoc($res))
{
$row["peer_id"] = hash_pad($row["peer_id"]);

if ($row["peer_id"] === $peer_id)
{
 $userid = $row["userid"];
 $self = $row;
 continue;
}

$resp .= "d" .
 benc_str("ip") . benc_str($row["ip"]) .
 benc_str("peer id") . benc_str($row["peer_id"]) .
 benc_str("port") . "i" . $row["port"] . "e" .
 "e";
}

$resp .= "ee";

$selfwhere = "torrent = $torrentid AND " . hash_where("peer_id", $peer_id);

if (!isset($self))
{
$res = mysql_query("SELECT $fields FROM peers WHERE $selfwhere");
$row = mysql_fetch_assoc($res);
if ($row)
{
 $userid = $row["userid"];
 $self = $row;
}
}

//// Up/down stats ////////////////////////////////////////////////////////////

if (!isset($self))
{
$rz = mysql_query("SELECT id, uploaded, downloaded FROM brukere WHERE ip='$ip' ORDER BY lastaction DESC LIMIT 1");
if (mysql_num_rows($rz) == 0)
 err("Unrecognized host ($ip). Please go to $BASEURL to sign-up or login.");
$az = mysql_fetch_assoc($rz);
$userid = $az["id"];

//	if ($left > 0 && $az["class"] < UC_VIP)
/*
//vi vil ikke ha dette ENDA
if ($az["class"] < UC_VIP)
{
 $gigs = $az["uploaded"] / (1024*1024*1024);
 $elapsed = floor((gmtime() - $torrent["ts"]) / 3600);
 $ratio = (($az["downloaded"] > 0) ? ($az["uploaded"] / $az["downloaded"]) : 1);
 if ($ratio < 0.5 || $gigs < 5) $wait = 48;
 elseif ($ratio < 0.65 || $gigs < 6.5) $wait = 24;
 elseif ($ratio < 0.8 || $gigs < 8) $wait = 12;
 elseif ($ratio < 0.95 || $gigs < 9.5) $wait = 6;
 else $wait = 0;
 if ($elapsed < $wait)
   err("Not authorized (" . ($wait - $elapsed) . "h) - READ THE FAQ!");
}
*/
}
else
{
$upthis = max(0, $uploaded - $self["uploaded"]);
$downthis = max(0, $downloaded - $self["downloaded"]);

if ($upthis > 0 || $downthis > 0)
 mysql_query("UPDATE brukere SET uploaded = uploaded + $upthis, downloaded = downloaded + $downthis WHERE id='$userid'") or err('feil');
}

///////////////////////////////////////////////////////////////////////////////

function portblacklisted($port)
{
// direct connect
if ($port >= 411 && $port <= 413) return true;

// bittorrent
if ($port >= 6881 && $port <= 6889) return true;

// kazaa
if ($port == 1214) return true;

// gnutella
if ($port >= 6346 && $port <= 6347) return true;

// emule
if ($port == 4662) return true;

// winmx
if ($port == 6699) return true;

return false;
}

$updateset = array();

if ($event == "stopped")
{
if (isset($self))
{
 mysql_query("DELETE FROM peers WHERE $selfwhere");
 if (mysql_affected_rows())
 {
 	if ($self["seeder"] == "yes")
   $updateset[] = "seeders = seeders - 1";
 	else
   $updateset[] = "leechers = leechers - 1";
 }
}
}
else
{
if ($event == "completed")
 $updateset[] = "times_completed = times_completed + 1";

if (isset($self))
{
 mysql_query("UPDATE peers SET uploaded = $uploaded, downloaded = $downloaded, to_go = $left, last_action = NOW(), seeder = '$seeder'"
 	. ($seeder == "yes" && $self["seeder"] != $seeder ? ", finishedat = " . time() : "") . " WHERE $selfwhere");
 if (mysql_affected_rows() && $self["seeder"] != $seeder)
 {
 	if ($seeder == "yes")
 	{
   $updateset[] = "seeders = seeders + 1";
   $updateset[] = "leechers = leechers - 1";
 	}
 	else
 	{
   $updateset[] = "seeders = seeders - 1";
   $updateset[] = "leechers = leechers + 1";
 	}
 }
}
else
{
 if (portblacklisted($port))
 	err("Port $port is blacklisted.");
 else
 {
 	$sockres = @fsockopen($ip, $port, $errno, $errstr, 5);
 	if (!$sockres)
   $connectable = "no";
 	else
 	{
   $connectable = "yes";
   @fclose($sockres);
 	}
 }

 $ret = mysql_query("INSERT INTO peers (connectable, torrent, peer_id, ip, port, uploaded, downloaded, to_go, started, last_action, seeder, userid, agent, uploadoffset, downloadoffset) VALUES ('$connectable', $torrentid, " . sqlesc($peer_id) . ", " . sqlesc($ip) . ", $port, $uploaded, $downloaded, $left, NOW(), NOW(), '$seeder', $userid, " . sqlesc($agent) . ", $uploaded, $downloaded)");
 if ($ret)
 {
 	if ($seeder == "yes")
   $updateset[] = "seeders = seeders + 1";
 	else
   $updateset[] = "leechers = leechers + 1";
 }
}
}

if ($seeder == "yes")
{
if ($torrent["banned"] != "yes")
 $updateset[] = "visible = 'yes'";
$updateset[] = "last_action = NOW()";
}

if (count($updateset))
$query = mysql_query("UPDATE torrents SET " . join(",", $updateset) . " WHERE id = $torrentid");

benc_resp_raw($resp) or err('kake');

?>

Har også prøvd og kjøre denne fila i en browser ( som dere sett har jeg slått av funksjonen som ikke tilatter dette ) og der får jeg ingen beskjed om at funksjoner er feil, eller mangler ; els...

 

 

om dere trenger benc.php fila også. Bare si ifra...

 

Takker for all hjelp..

Endret av stianiquniez
Lenke til kommentar
Videoannonse
Annonse

Jeg har laget et nettsamfunn, så jeg kan vel PHP i mer eller mindre grad ja..

 

ja, jeg skjønner scriptet, men jeg finner altså ikke feilen, og håper noen kan se den, lettere og se den når man ikke har sett gjennom koden litt over 150 ganger som meg, som holder på og bli idiot av og se på den og av ordene "invalid data from tracker".

 

er sikkert bare en bagatel som banger, er det bestandig, men jeg finner den altså ikke :cry:

Lenke til kommentar
Jeg har laget et nettsamfunn, så jeg kan vel PHP i mer eller mindre grad ja..

 

ja, jeg skjønner scriptet, men jeg finner altså ikke feilen, og håper noen kan se den, lettere og se den når man ikke har sett gjennom koden litt over 150 ganger som meg, som holder på og bli idiot av og se på den og av ordene "invalid data from tracker".

 

er sikkert bare en bagatel som banger, er det bestandig, men jeg finner den altså ikke  :cry:

9552344[/snapback]

Du har nettopp løst problemet selv.. du har et problem med hash strengen...

Hvilket nettsamfunn btw?

Lenke til kommentar

hash strengen ? Kan du være litt mer spesifikk og fortelle meg hvor feilen ligger ? ifølge torrent programmet er det invalid data fra trackern, altså at trackern ikke skjønner hva den får tilbake..

 

Var et nettsamfunn som het NordNett eller SK gidder ikke skrive real navn på det her, som det het før.. Men ble lagt ned på grunn av en rekke grunner..

Lenke til kommentar
hash strengen ? Kan du være litt mer spesifikk og fortelle meg hvor feilen ligger ? ifølge torrent programmet er det invalid data fra trackern, altså at trackern ikke skjønner hva den får tilbake..

 

Var et nettsamfunn som het NordNett eller SK gidder ikke skrive real navn på det her, som det het før.. Men ble lagt ned på grunn av en rekke grunner..

9552517[/snapback]

foreach (array("info_hash","peer_id") as $x)
{
if (strlen($GLOBALS[$x]) != 20)
err("invalid $x (" . strlen($GLOBALS[$x]) . " - " . urlencode($GLOBALS[$x]) . ")");
}

Sjekk om hash strengen din ikke er bare 20 tegn lang..

Lenke til kommentar

Om det var en feil med hash strengen, ville det ikke stått "invalid $x (" . strlen($GLOBALS[$x]) . " - " . urlencode($GLOBALS[$x]) . ")"

 

da ?

 

dessuten funker jo scriptet helt ned til

 

"err("Unrecognized host ($ip). Please go to $BASEURL to sign-up or login.");"

 

for der fikk jeg err første gang fordi at jeg ikke hadde ip addressen min i brukere databasen, så min teori er jo at feilen må ligge lenger ned ? og når ip adressen var fikset, fikk jeg igjen "invalid data from tracker" så det er data senere i scriptet den ikke skjønner så vidt jeg har forstått..

Lenke til kommentar

Okey

Da har jeg "tatt" over for stian for en stund

Og jeg sendte litt falske error beskjeder til klienten.

Deriblandt $resp.

 

Altså det som blir sendt til klienten

 

$resp inne holdt da:

d8:intervalie5:peersld2:ip13:192.168.1.1007:peer id20:-KT2100-2084505407954:porti1337eed2:ip13:192.168.1.1007:peer id20:-KT2100-7730236908324:porti1337eeee

 

Og helt feil etter det jeg har skjønt.

 

Innholdet i torrent fila er:

d8:announce42:http://torr_test.no-ip.org/announce.php10:created by12:KTorrent 2.113:creation datei1190552685e4:infod5:filesld6:lengthi56251e4:pathl14:bookmarks.htmleee4:name7:torrent12:piece lengthi262144e6:pieces20:L…?À×ÝS+dK|�>ô Qee

Endret av AlecTBM
Lenke til kommentar
  • 1 måned senere...

jeg vet ikke helt hva dere sliter med, men kan tipse om denne her:

http://www.whitsoftdev.com/opentracker/

 

har brukt den til å lage en liten bittorrent tracker for meg selv. dette er da en ren tracker. så du må lage det rundt selv.

 

det jeg gjorde var ganske enkelt å lage en table til hvor jeg matet inn torrent filer.

 

bruker så bdecode(torrent) og sha1(bencode(torrent['info'])) og ender opp med hash verdien du trenger for å matche peers i tracker table med torrentfiler i torrentfil table.

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...