Avatar billede bronsholt Nybegynder
26. maj 2003 - 10:23 Der er 9 kommentarer og
1 løsning

Socket kodning / telnet

Hej,

Jeg er ved at lave et program, som skal kunne sende og modtage data fra en telnet-session til en router. Jeg kan godt få forbindelse til routeren, og få printet linierne med, at jeg skal indtaste pwd, men de kommer så hurtigt, at jeg ikke kan nå at sende en streng med gyldigt pwd den anden vej. Hvordan "pauser" jeg modtagelse, eller validerer modtagelsen, så ledes at jeg kan vente på, hvad der kommer ind, validere det, og evt. sende en ny kommando den anden vej?

Jeg skriver lige koden med for en ordens skyld. Håber at I kan hjælpe...:


$fp = fsockopen ($IPNr, $PortNr, $errno, $errstr, 5);
        if (!$fp) {
            echo "telnet forbindelse offline";
        }
        else
        {
           
            fputs ($fp, "GET / HTTP/1.0\r\nHost: echo $IPNr \r\n\r\n");
           
            while (!feof($fp)) {
                $buffer = fgets ($fp, 128);

                if(strstr($buffer, "Password:")){
                    fwrite ($fp, $Pwd);
                 
                    echo "Password indtastet!<BR>";
                    break;
                }
            }           
            fclose ($fp);
        }
Avatar billede sostack Nybegynder
26. maj 2003 - 10:25 #1
Note: If you need to set a timeout for reading/writing data over the socket, use socket_set_timeout(), as the timeout parameter to fsockopen() only applies while connecting the socket.

//SOSTACK
Avatar billede jakoba Nybegynder
26. maj 2003 - 10:28 #2
i din fputs linie slutter du af med 2 linieskift efter hinanden. er du sikker på det er korrekt?  og sikker på at der skal bruges både \r og \n til et linieskift? det kan være det er nok med \r

mvh JakobA
Avatar billede bronsholt Nybegynder
26. maj 2003 - 10:34 #3
>>sostack
can you make an examble, please?
Avatar billede bronsholt Nybegynder
26. maj 2003 - 10:35 #4
>>jakoba
Nej, jeg er ikke sikker, jeg fandt det blot i en andet script, og brugte det direkte derfra. Tror du kun at der skal være \r?
Avatar billede jakoba Nybegynder
26. maj 2003 - 10:38 #5
jep, men det er kun 'tro'.  Baseret på at \r er alt hvad du sender når du trykker <enter> knappen.
Avatar billede sostack Nybegynder
26. maj 2003 - 11:02 #6
Example 1:
<?php
$fp = fsockopen("www.example.com", 80);
if(!$fp) {
    echo "Unable to open\n";
} else {
    fputs($fp, "GET / HTTP/1.0\n\n");
    $start = time();
    stream_set_timeout($fp, 2);
    $res = fread($fp, 2000);
    var_dump(stream_get_meta_data($fp));
    fclose($fp);
    print $res;
}
?>

fra http://www.php.net/manual/en/function.stream-set-timeout.php

//sostack
Avatar billede bronsholt Nybegynder
26. maj 2003 - 11:13 #7
>>sostack

Ja, den sidder jeg også og kigger på, men kan ikke rigtig "oversætte" til det, som jeg skal bruge... Kan du hjælpe mig med det?
Avatar billede sostack Nybegynder
26. maj 2003 - 11:35 #8
Den timeout du sætter i fsockopen() er kun gældende for hvor længe der skal ventes på at sytemet i den anden ende svarer.
den timeout der sættes med stream_set_timeout() gælder for læsning fra socketen (fgets()), og skrivning til socketen (fputs()).
Avatar billede bronsholt Nybegynder
26. maj 2003 - 12:05 #9
>>sostack
Vil du ikke nok hjælpe mig med det eksempel med eks. password indtastning så? Jeg har bare brug for læsning af linien med password, sende en streng med password og læse en ny linie... og password indtastningen er blot et eksempel... Jeg skal kunne læse og skrive til routeren og altså holde en "dialog" igang, som jeg selv kan styre med IF og CASE sætninger...

Håber virkelig at du kan hjælpe mig.. Det ser lysere ud allerede
Avatar billede bronsholt Nybegynder
02. juni 2003 - 12:45 #10
lukker
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