Probleme avec shell

Fermé
Liberty - 13 août 2009 à 05:36
 Liberty - 13 août 2009 à 20:38
Bonjour,

Avant de vous exposer mon soucis, le morceau de mon code qui pause problème :
$telnet = @fsockopen($shell['host'], $shell['port'], $errno, $errstr, 3);
fgets($telnet,1024);
fputs($telnet, "USER ".$shell['user']."\n");
sleep(1);
fputs($telnet, "PASS ".$shell['password']."\n");
sleep(1);
fgets($telnet,1024);
sleep(1);
fputs($telnet, "senditems $character \"$titre_message\" \"$core_message\" $iditem\n");
fclose($telnet);


Pour les détails, je suis hébergé chez OVH, Ubuntu.

Et voici ce que me renvoi mon .php quand la page s'exécute :
Warning: fgets(): supplied argument is not a valid stream resource in /var/www/envoi_item.php on line 95

Warning: fputs(): supplied argument is not a valid stream resource in /var/www/envoi_item.php on line 96

Warning: fputs(): supplied argument is not a valid stream resource in /var/www/envoi_item.php on line 98

Warning: fgets(): supplied argument is not a valid stream resource in /var/www/envoi_item.php on line 100

Warning: fputs(): supplied argument is not a valid stream resource in /var/www/envoi_item.php on line 102

Warning: fclose(): supplied argument is not a valid stream resource in /var/www/envoi_item.php on line 103  


Je suis complétement largué, j'ai beau avoir passé 1h sur google à chercher une solution, j'ai rien trouvé :/

En tout cas, merci d'avance =)
A voir également:

13 réponses

lecube Messages postés 304 Date d'inscription samedi 14 mars 2009 Statut Membre Dernière intervention 13 avril 2010 54
13 août 2009 à 07:32
Bonjour,

D'abord ton titre est traite ... Je m'attendais a du ksh ou du sh ... Alors j'ai verifie la definition de shell .. Et ca correspond. Hop, je suis moins c{@{ :-P

Pour ton probleme, tes erreurs sont surement generes car $telnet n'est pas bon. Le sockopen ne s'est pas effectue. Tu devrais faire un code stype :
if (!$telnet) {
echo "$errstr ($errno)<br />\n";
} else {
fgets($telnet,1024);
....
}

Ca retira toutes les erreurs d'une part et cela te sortira l'erreur de sockopen.
Dit nous ce que cela te sort maintenant ...
0
Hummm aucun erreur ne s'affiche, et bizarrement le code fonctionne...
comment ? Aucune idée, mais malgré qu'il n'y ait plus d'erreur, il ne fonctionne pas pour autant :/
J'suis encore plus largué qu'avant ><
0
Désolé du double poste, mais voici ce que me retourne chaque variable en echo :

$errno => 0
$errstr =>
$telnet => Resource id #2
0
lecube Messages postés 304 Date d'inscription samedi 14 mars 2009 Statut Membre Dernière intervention 13 avril 2010 54
13 août 2009 à 14:09
Extrait
Si l'appel échoue, fsockopen  retourne FALSE  , et si les options errno  et errstr  ont été fournies, elles contiennent désormais les raisons de l'échec. Si l'erreur retournée est 0 et que la fonction retourne FALSE  , c'est une indication d'erreur. C'est probablement dû à une erreur d'initialisation de la socket. 


Curieux que errstr ne contienne rien .. :-(
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
En gros ip + port okay.

Mais bizarrement que je change le passe ou l'username on y mettant un truc bidon, l'execution se passe normalement aucune erreur quoi, donc j'dois avoir une couille autre part que dans mon script :/
0
lecube Messages postés 304 Date d'inscription samedi 14 mars 2009 Statut Membre Dernière intervention 13 avril 2010 54
13 août 2009 à 14:49
Non, ca c'est plutot logique ... Si on considere que fsockopen ne fonctionne pas ... Si tu as mis le if que je t'ai donne, on ne passe meme pas dans les fputs et fgets. Non ?

Tu pourrais remettre le code actualise ?
0
j'ai mis ce code moi :
$shell = Array(
	'host' => "localhost",	//Adresse du serveur
	'port' => 3443,			//Port utiliser par la console
	'user' => "root",		//Compte MJ/ADIM du jeu
	'password' => "pass"		//Mot de passe du compte
);

$telnet->Connect($shell['host'], $shell['user'], $shell['password']);

						if ($telnet)
						{
							fgets($telnet,1024);
							fputs($telnet, "USER ".$shell['user']."\n");
							sleep(1);
							fputs($telnet, "PASS ".$shell['password']."\n");
							sleep(1);
							fgets($telnet,1024);
							sleep(1);
							fputs($telnet, "senditems personnage \"message\" \"test\" $value\n");
							fclose($telnet);
							echo '<p>L\'objet a été envoyé au personnage</p>';
						}
						else 
						{
							echo '<p>Erreur</p>';
						}


Et aucune erreur, il passe le if et me marque que l'item est envoyé, donc pour moi fsockopen fonctionne mais ça viendrait d'autre part :/

Et j'ai testé de mettre des ident bidon, ce gland fait pas la difference, il passe le if mais me marque que l'item est envoyé :x
0
lecube Messages postés 304 Date d'inscription samedi 14 mars 2009 Statut Membre Dernière intervention 13 avril 2010 54
13 août 2009 à 15:40
Tu m'embrouilles ... t'es passe d'un probleme fsockopen a un connect ... Sans declaration au prealable de la classe utilise ?

$telnet, c'est quoi ?
0
Merde, désolé j'ai copier le mauvais code ><

$shell = Array(
'host' => "localhost", //Adresse du serveur
'port' => 3443, //Port utiliser par la console
'user' => "root", //Compte MJ/ADIM du jeu
'password' => "pass" //Mot de passe du compte
);

$telnet = @fsockopen($shell['host'], $shell['port'], $errno, $errstr, 3);

if ($telnet)
{
fgets($telnet,1024);
fputs($telnet, "USER ".$shell['user']."\n");
sleep(1);
fputs($telnet, "PASS ".$shell['password']."\n");
sleep(1);
fgets($telnet,1024);
sleep(1);
fputs($telnet, "senditems personnage \"Titre\" \"Texte\" ID\n");
fclose($telnet);
echo '<p>L\'objet a été envoyé au personnage</p>';
}
else
{
echo '<p>Erreur</p>';
}

?>

Et merci de tes réponse quand même =)
0
lecube Messages postés 304 Date d'inscription samedi 14 mars 2009 Statut Membre Dernière intervention 13 avril 2010 54
13 août 2009 à 19:30
Si je resume, tu as le message "L\'objet a été envoyé au personnage" qui s'affiche MAIS le senditems n'a pas été émis sur le port de ton localhost .C'est juste ?
0
En gros c'est ça, tout ce passe comme normalement, mais le senditem n'est pas exécute.

Et meme en changeant les ident par n'importe quoi, aucune erreur ne s'afficher, j'comprend rien ><
0
lecube Messages postés 304 Date d'inscription samedi 14 mars 2009 Statut Membre Dernière intervention 13 avril 2010 54
13 août 2009 à 19:40
Connais tu WireShark ? Cet outil OpenSource ( je travaille avec un des plus important contributeur ... ), il permet d'ecouter tous les flux sur un reseau. Je te conseille de l'installer et d'ecouter le port 3443 de ton PC (localhost). Il faut qu'on sache si c'est ton code qui envoie rien ( et la j'en doute) ou si c'est la console qui n'arrive pas à interpreter ton message. Si tu vois ton message sur Wireshark, ce sera le dernier cas et la, je ne pourrais plus t'aider ;-P
0
Humm okay, je test ça et j'te tiens au courant du résultat =)
0