Avatar billede hmortensen Nybegynder
02. november 2004 - 14:21 Der er 8 kommentarer og
1 løsning

Parse output fra telnet

Hejsa

Jeg har flg. script, som logger ind på min router via telnet, og vælger 'System status', men hvordan får jeg outputtet læsbart ?

<?php
$fp=fsockopen("xxx.xxx.xxx.xxx",23023);

fputs($fp,"kodeord\r");
usleep(125000);
fputs($fp,"24\r");
usleep(125000);
fputs($fp,"1\r");
usleep(125000);
usleep(125000);

do                               
{ 
  $output.=fread($fp, 80);
  $stat=socket_get_status($fp);
}
while($stat["unread_bytes"]);
echo $output;
fclose($fp);
?>

Noget af outputtet:

ÿûÿû Password: ********** 78ÿûGettingStarted1.GeneralSetup3.LANSetup4.InternetAccessSetupAdvancedApplications11.RemoteNodeSetup12.StaticRoutingSetup15.NATSetupAdvancedManagement21.FilterSetConfiguration22.SNMPConfiguration23.SystemPassword24.SystemMaintenance25.IPRoutingPolicySetup26.ScheduleSetup99.ExitEnterMenuSelectionNumber:Copyright(c)1994-2003ZyXELCommunicationsCorp.Prestige650R-31MainMenu247878ÿûMenu24-SystemMaintenance1.SystemStatus2.SystemInformationandConsolePortSpeed[
Avatar billede hmortensen Nybegynder
02. november 2004 - 14:32 #1
Måske man bare kan splitte ;
Avatar billede Slettet bruger
02. november 2004 - 16:07 #2
Det er vel bare et spørgsmål om at kende escape-sekvenserne, der styrer farver og placering og fjerne dem.

Har du overvejet at snakke med webinterfacet i stedet for telnet? Det er måske lidt lettere at parse data derfra.
Avatar billede hmortensen Nybegynder
02. november 2004 - 17:49 #3
Hvordan sender jeg et login til http auth ?
Avatar billede Slettet bruger
02. november 2004 - 23:05 #4
Avatar billede hmortensen Nybegynder
03. november 2004 - 08:27 #5
Når jeg prøver med file_get_contents("http://username:password@ip:port/page.html");
får jeg en fejl.
HTTP request failed! HTTP/1.1 401 Unauthorized

Men hvis jeg bruger samme link i en browser, virker det fint.
Kan det gøres anderledes ?
Avatar billede Slettet bruger
03. november 2004 - 22:12 #6
Ja, man kan snakke http med den via fsockopen - lidt lige som du snakkede telnet med den.

<?php

$ip="xxx.xxx.xxx.xxx";
$port=2323;
$user="brugernavn";
$pass="password";

$auth=base64_encode($user . ":" . $pass);

$sock = fsockopen(ip, $port, $errno, $errstr, 30);
if (!$sock) die("$errstr ($errno)\n");



fwrite($sock, "GET /page.html HTTP/1.0\r\n");
fwrite($sock, "Host: $ip\r\n");
fwrite($sock, "Authorization: Basic $auth\r\n"; // Her sendes login-info
fwrite($sock, "Accept: */*\r\n");
fwrite($sock, "\r\n");
fwrite($sock, "$data\r\n");
fwrite($sock, "\r\n");

$headers = "";
while ($str = trim(fgets($sock, 4096)))
  $headers .= "$str\n";

echo "\n";

$body = "";
while (!feof($sock))
  $body .= fgets($sock, 4096);

fclose($sock);
?>

Dette skulle gerne resultere i at $head indeholder HTTP-headers, og $body indeholder selve HTML-dokumentet. Hvis det ikke virker, så prøv at fortælle, hvad headeren WWW-Authenticate: indeholder, når du prøver uden linien men login-info.
Avatar billede hmortensen Nybegynder
05. november 2004 - 14:41 #7
Tak for hjælpen. Det virker fint.

Brugte dog nogle minutter på at finde fejlen, fordi du havde glemt $ foran ip variablen i fsockopen() funktionen, og jeg havde sat en venlig fejlmeddelse på :)
Avatar billede Slettet bruger
05. november 2004 - 21:43 #8
Så laver jeg lige et svar.

Kunne du også få det ud fra webinterfacet, du skulle bruge?
Avatar billede hmortensen Nybegynder
05. november 2004 - 22:29 #9
Ja, det kunne jeg, og det svarer faktisk hurtigere over nettet, hvorimod telnet svarer hurtigere på lan. (don't ask :) )
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester