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: ********** 7[1;24r8ÿû[;H[2J[5;6HGetting[5;14HStarted[6;8H1.[6;11HGeneral[6;19HSetup[7;8H3.[7;11HLAN[7;15HSetup[8;8H4.[8;11HInternet[8;20HAccess[8;27HSetup[10;6HAdvanced[10;15HApplications[11;8H11.[11;12HRemote[11;19HNode[11;24HSetup[12;8H12.[12;12HStatic[12;19HRouting[12;27HSetup[13;8H15.[13;12HNAT[13;16HSetup[5;43HAdvanced[5;52HManagement[6;45H21.[6;49HFilter[6;56HSet[6;60HConfiguration[7;45H22.[7;49HSNMP[7;54HConfiguration[8;45H23.[8;49HSystem[8;56HPassword[9;45H24.[9;49HSystem[9;56HMaintenance[10;45H25.[10;49HIP[10;52HRouting[10;60HPolicy[10;67HSetup[11;45H26.[11;49HSchedule[11;58HSetup[14;45H99.[14;49HExit[21;27HEnter[21;33HMenu[21;38HSelection[21;48HNumber:[1;21HCopyright[1;31H(c)[1;35H1994[1;40H-[1;42H2003[1;47HZyXEL[1;53HCommunications[1;68HCorp.[1;21H[3;31HPrestige[3;40H650R-31[3;48HMain[3;53HMenu[3;31H[21;56H24[21;56H[1;1H7[1;24r8[24;1H7[1;24r8ÿû[;H[2J[3;27HMenu[3;32H24[3;35H-[3;37HSystem[3;44HMaintenance[5;26H1.[5;30HSystem[5;37HStatus[6;26H2.[6;30HSystem[6;37HInformation[6;49Hand[6;53HConsole[6;61HPort[6;66HSpeed[
Annonceindlæg fra HP
02. november 2004 - 14:32
#1
Måske man bare kan splitte [x;
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.
02. november 2004 - 17:49
#3
Hvordan sender jeg et login til http auth ?
Slettet bruger
02. november 2004 - 23:05
#4
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 ?
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.
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å :)
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?
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 :) )
Vi tilbyder markedets bedste kurser inden for webudvikling