0/5 (2 avis)
Vue 6 272 fois - Téléchargée 194 fois
$nick = 'Robot'; $pass = ''; $address = ''; $port = 411; $command = 'hello world'; $sharesize = 3221225472; // en octet $connection = 'DSL'; $email = ''; $description = 'Bot'; $hubs = '1/0/0'; $version = 0.674; $mode = 'A'; $slots = 3; function envoyer($sock, $str) { socket_send($sock, $str.'|', strlen($str) + 1, NULL); } // cette fonction est propre au protocol DC et est utilisée en cas de réception d'un $Lock // je l'ai trouvée sur le site de DC++ et j'aimerais mieux ne pas répondre aux questions sur le contenu de celle-ci function lock2key($_LOCK) { $lockLength = strlen ($_LOCK); $h = ord($_LOCK{0}) ^ ord( $_LOCK{ $lockLength - 1} ) ^ ord( $_LOCK{ $lockLength - 2} ) ^ 5; //echo $h . "<br>"; while ($h > 255) {$h = $h - 256;} $h = (($h<<4) & 240) | (($h>>4) & 15); $a = $h; if ($a == '126' || // '~' $a == '124' || // '|' $a == '96' || // '`' $a == '36' || // '$' $a == '5' || // '^E' $a == '0') // NUL { $LockToKey = "/%DCN"; if ($a < 100) $LockToKey .="0"; if ($a < 10) $LockToKey .="0"; $LockToKey .= $a; // As a string integer $LockToKey .= "%/"; } else { $LockToKey = chr ($a); // No transformation. } for ($j = 1; $j < strlen($_LOCK); $j++) { $h = ord($_LOCK{$j}) ^ ord($_LOCK{$j-1}); while ($h > 255) {$h = $h - 256;} $h = (($h<<4) & 240) | (($h>>4) & 15); //echo $j . " - " . ($h*16) . "<br>"; $a = $h; if ($a == '126' || // '~' $a == '124' || // '|' $a == '96' || // '`' $a == '36' || // '$' $a == '5' || // '^E' $a == '0') // NUL { $LockToKey .= "/%DCN"; if ($a < 100) $LockToKey .="0"; if ($a < 10) $LockToKey .="0"; $LockToKey .= $a; // As a string integer $LockToKey .= "%/"; } else { $LockToKey .= chr ($a); // No transformation. } } return $LockToKey; } echo 'Initialisation...<br>'; $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); echo 'Socket créé...<br>'; if (!socket_connect($socket, gethostbyname($address), $port)) { echo 'Erreur : '.socket_strerror(socket_last_error()); return; } echo 'Socket connecté...<br>'; while ($buffer = socket_read($socket, 2048, PHP_BINARY_READ)) { $phrases = explode('|', $buffer); // il est possible que plusieurs packets soient envoyés ensemble, il faut donc les séparer grâce au '|' qu'il y a à la fin de chacun d'entre eux for ($i = 0; $i < sizeof($phrases); ++$i) { $tag = explode(' ', $phrases[$i]); switch($tag[0]) { case '$BadPass': echo "Mauvais mot de passe<br>\r\n"; break; case '$GetPass': envoyer($socket, '$MyPass '.$pass); echo "Mot de passe envoyé<br>\r\n"; break; case '$Hello': if ($tag[1] == $nick) { envoyer($socket, '$Version 1,0091'); envoyer($socket, '$GetNickList'); envoyer($socket, '$MyINFO $ALL '.$nick.' '.$description.'<++ V:'.$version.',M:'.$mode.',H:'.$hubs.',S:'.$slots.'>$ $'.$connection.'.$'.$email.'$'.$sharesize.'$'); echo 'Infos envoyées'."<br>\r\n"; } break; case '$HubName': echo 'Le nom du hub est'; for ($i = 1; $i < sizeof($tag); $i++) echo ' '.$tag[$i]; echo "<br>\r\n"; break; case '$Lock': envoyer($socket, '$Supports UserCommand NoGetINFO NoHello UserIP2 TTHSearch '); echo 'Le serveur demande la key correspondant à "'.$tag[1]."\"<br>\r\n"; echo 'Cette clé est : '.lock2key($tag[1])."<br>\r\n"; envoyer($socket, '$Key '.lock2key($tag[1])); envoyer($socket, '$ValidateNick '.$nick); echo 'Nick envoyé : '.$nick."<br>\r\n"; break; case '$LogedIn': break; case '$MyINFO': if ($tag[2] == $nick) { envoyer($socket, '<'.$nick.'> '.$command); break 3; } break; case '$NickList': break; case '$OpList': break; case '$Quit': break; case '$Search': break; case '$Supports': break; case '$ValidateDenide': echo "Le pseudonyme est déjà utilisé par le serveur<br>\r\n"; break; default: if (substr($tag[0], 0, 1) == '<') { // message d'un des user } else if ($tag[0] != "") echo "Le hub a envoyé une commande non supportée : \"".$tag[0]."\"<br>\r\n"; } } } // cette ligne marque si le hub nous a déconnecté, mais elle marque aussi "opération réussie" autrement, // je ne mets donc pas de "if (il y a une erreur) avant" echo socket_strerror(socket_last_error()); socket_close($socket);
18 mai 2006 à 10:39
http://sourceforge.net/docman/display_doc.php?docid=8825&group_id=36589
est une très bonne réponse (preque tout dedans)
Donc ... je laisse tout de même ce lien pour éviter que d'autres demande !
18 mai 2006 à 10:31
Serait-ce possible de savoir ou trouver une doc sur le protocol DC (s'il y en a) ?
Sinon, merci pour ce code en php, même si je compte le transférer en C++ avec interface graphique ...
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.