Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Etablir une connexion Telnet en PHP sur un serveur UNIX

1 réponse
Avatar
Robert PADOVANO
Bonjour,

Je désire établir une connexion en langage PHP sur un serveur UNIX par
TELNET.
En fait, je voudrais
- Me connecter en envoyant l'adresse IP, le login, le mot de passe
- Envoyer une commande (exemple : LS -AL)
- Récupérer le résultat sous forme de chaine de caractères
- Envoyer une commande (exemple : CD ..)
- Récupérer le résultat sous forme de chaine de caractères
- Etc ...

J'en suis déjà à un stade très avancé mais je n'ai pas résolu mon problème
complètement.
Je dispose à l'heure actuelle de 3 solutions :

Solution 1 : Un programme écrit avec les sockets
------------------------------------------------
// Fonction de lecture du flux
function LisFlux($flux)
{
// On attend le 1er caractère
$Char = false;
while (!$Char) $Char = fgetc($flux);

$Output = $Char;

// Lecture de la suite
$Output .= fread($flux,1024);

// On remplace les retour chariot
$Output = str_replace("\n", "<br>", $Output);

return $Output;
}

$Socket = pfsockopen($HostName,$Port);

if (! $Socket)
{
echo 'Impossible d\'etablir la connexion telnet : <br>';
echo strerror ($Socket) . '<br>';
}
else
{
// Header 1
fputs($Socket,$Header1);
LisFlux($Socket);

// Header 2
fputs($Socket,$Header2);
echo LisFlux($Socket);

// Ecriture du login
fputs($Socket,"login\r");
echo LisFlux($Socket);

// Ecriture du Passwd
fputs($Socket,"passwd\r");
echo LisFlux($Socket);

// Ecriture de la commande
fputs($Socket, $Commande . "\r");
echo LisFlux($Socket);

}


Cette solution fonctionne à peu près bien mais elle n'est pas stable
- Je n'arrive pas à modifier le timeout qui reste désespérément fixe à 30s
- Je n'arrive pas à lire correctement le flux renvoyé
En fait, je fais 2 fois la même chose mais je n'obtient pas le même
résultat.
Parfois, le flux renvoyé est tronqué. Parfois, il est correct.


Quelqu'un aurait-il déjà acrit un programme fonctionnel en PHP avec les
sockets pour Telnet ?


Solution 2 : Utiliser CURL qui est implanté d'origine dans le PHP
-----------------------------------------------------------------
J'ai écris un programme en PHP avec la librairie CURL
Ce programme fonctionne correctement pour une connexion HTTP, FTP, ...
Par contre, je n'ai aucune documentation ni aucun exemple pour une connexion
Telnet

Quelqu'un aurait-il déjà acrit un programme en PHP avec CURL pour Telnet ?


Solution 3 : Utiliser EXPECT
----------------------------
J'ai téléchargé EXPECT pour Windows (Je développe avec EasyPHP)
Mais là, la doc est complètement incompéhensible

Quelqu'un aurait-il déjà acrit un programme en PHP avec EXPECT pour Telnet ?


L'une ou l'un d'entre-vous pourrait-il me sauver ?

Merci par avance de répondre sur mon email : rpadovano@buyingpack.com

Robert PADOVANO

1 réponse

Avatar
loufoque
Robert PADOVANO wrot

Cette solution fonctionne à peu près bien mais elle n'est pas stable
- Je n'arrive pas à modifier le timeout qui reste désespérément fixe à 30s
Je ne vois aucun réglage du timeout dans ton script.

Pour le timeout de la connexion, il faut le préciser dans l'appel à
pfsockopen(), pour le reste c'est stream(socket)_set_timeout()

Parfois, le flux renvoyé est tronqué.
Tu ne récupères que les 1024 premiers caractères. S'il y en a plus, et

bien c'est tronqué. À mon avis ça vient de là.