Avatar billede steffen Nybegynder
05. september 2000 - 23:36 Der er 7 kommentarer og
1 løsning

Telnet via PHP

Hvordan laver man mon et lille script, der via fsockopen() - eller lign, du bestemmer - åbner en telnetforbindelse på port 23 til en standard Linux RedHat, logger ind, kører en eller gerne flere brugerbestemte kommandoer og logger ud? Naturligvis skal feedback fra systemet kunne trækkes med tilbage ..

Jeg har ikke tid til at chekke RFC\'en ud for øjeblikket, så alle gode bud er velkomne :-)

Strukturen i det er vel nogenlunde:

- Opret forbindelse på port 23
- Så længe modtaget tegn <> \":\"
    Skip tegn
- Send $login + \\n
- Så længe modtaget tegn <> \":\"
    Skip tegn
- Send $pass +\\n

Herefter er timingen af tingene ikke så vigtig - det er bare at sende og modtage løs (1k chunks ok), når først login er overstået.

Point gives til testet løsning.
Avatar billede long_island Nybegynder
06. september 2000 - 08:49 #1
Jeg lytter bare :-)
Avatar billede doeleman Nybegynder
06. september 2000 - 09:05 #2
Jeg faldt over følgende:
http://alfalinux.sourceforge.net/pcom.php3

Måske noget du kunne bruge?!?
Avatar billede steffen Nybegynder
06. september 2000 - 09:45 #3
Nope - hvis du har kigget på den, vil du se den bruger exec() funktionalitet lokalt på maskinen - vi skal i en helt anden grøft :-)
Avatar billede sorenmh Nybegynder
06. september 2000 - 17:11 #4
List of telnet.inc
09/06/00 05:09

--------------------------------------------------------------------------------


<?php
/*
  Auth  :  Mike McWilliams <php@iometrics.com>
  Date  :  2/24/1998
  Desc  :  Simple telnet session (port 23) to talk to a
            specific ip address.  Designed to work with
            HP JetDirect Network Cards.  $hostname can
            be set as an IP address or a host name found
            in /etc/hosts. Keep in mind it is best to set
            $hostname with the $ip variable in printer.php3
            script file.

  Also  :  see printer.php3 (it calls this script)

  Updates:
          2/24/98  Banner status can be changed
*/

class telnet_class
{
  var $banner;
  var $port=23;
  var $hostname= \"\";
  var $connection=0;
  var $state= \"DISCONNECTED\";

Function OpenConnection()
{
  if($this->hostname== \"\")
  return( \"2 it was not specified a valid hostname\");
  $this->connection=fsockopen($this->hostname,$this->port);
 
  switch($this->connection)
  {
  case 0:
    echo  \"File not opened\";
    return( \"<BR><BR>File not created<BR>\".$this->hostname. \" \".$this->port). \"<BR>\";
  case -3:
    return( \"-3 socket could not be created\");
  case -4:
    return( \"-4 dns lookup on hostname \\\"$hostname\\\" failed\");
  case -5:
    return( \"-5 connection refused or timed out\");
  case -6:
    return( \"-6 fdopen() call failed\");
  case -7:
    return( \"-7 setvbuf() call failed\");
  default:
    return( \"\");
  }
}           

Function GetLine()
{
  for($line= \"\";;)
  {
  if(feof($this->connection))
    return(0);
  $line.=fgets($this->connection,100);
  $length=strlen($line);
  if($length>=2
  && substr($line,$length-2,2)== \"\\r\\n\")
    return(substr($line,0,$length-2));
  }
}
 
Function PutLine($line)
{
  return(fputs($this->connection, \"$line\\r\\n\"));
}   

Function CloseConnection()
{
  if($this->connection!=0)
  {
  fclose($this->connection);
  $this->connection=0;
  }
}       

/* ___________ Public Functions ______________ */

Function Open()
{
    //OPEN CONNECTION TO HOST
  if(($error=$this->OpenConnection())!= \"\")
      return($error);

    //IF WE ARE CONNECTED, PERFORM COMMANDS
  if ($this->connection) {
      $this->PutLine( \"\\r\\n\");
      $this->PutLine( \"?\");
      $this->GetLine();

      if (isset($this->banner)){
        if (strval($this->banner)==0){
            $this->PutLine( \"BANNER:0\");
          } elseif (strval($this->banner)==1){
            $this->PutLine( \"BANNER:1\");
        }
      }

      //TELL HOST WE WISH TO QUIT
      $this->PutLine( \"quit\");

      //READ WHAT THE HOST SENT US
      $message=0;
      $i=0;
      $jetdirect =  \"JETDIRECT PARAMETERS CONFIGURED\";
      $quitmsg =  \"USER QUITTING\";

      //LOOP THROUGH LINES UNTIL EOF OR 40 LINES ARE PROCESSED
      while (!feof($this->connection) && ($i<40)) {
        $currentline=$this->GetLine();
        $bTripped=$bTripped || strstr(strtoupper($currentline),$jetdirect);
       
          //ONLY DISPLAY $jetdirect LINE AND BEYOND (do not show quit message)
        if (($bTripped) && (!strstr(strtoupper(chop($currentline)),$quitmsg))) {
            //SEE IF THIS LINE HAS THE BANNER STATUS
            if (strstr(strtoupper($currentline),  \"BANNER\")){

              //CREATE URL VARIABLES
              $banner= \"<A href=\\\"./printer.php3?ip=\".$this->hostname. \"&banner=\";
              $suffix= \"\\\">Click to Change</A>\";

              //SEE WHAT THE STATUS OF THE BANNER IS
              if (!strstr(strtoupper($currentline), \"ENABLED\")){
                  //BANNER IS DISABLE (see the ! above) MAKE URL FOR ENABLE
                  // AND ADD THE MESSAGE TO THE ARRAY
                $messages[$message]=strtoupper($currentline).$banner. \"1\".$suffix;
              } elseif (strstr(strtoupper($currentline), \"ENABLED\")){ 
                  //BANNER IS ENABLED - MAKE URL FOR DISABLE
                  // AND ADD THE MESSAGE TO THE ARRAY
                $messages[$message]=strtoupper($currentline).$banner. \"0\".$suffix;
              }
            } else {
                //ADD THE MESSAGE TO THE ARRAY
              $messages[$message]=strtoupper($currentline);
              $message++;
            }
        }
        $i++;
      }
    } else {
      $messages[0]= \"-ERROR\";
  }

    //CLOSE THE CONNECTION
  $this->CloseConnection();
  return($messages);
}           

Function Close()
{
  $this->CloseConnection();
  $this->state= \"DISCONNECTED\";
  return($error);
}             
};
?>



--------------------------------------------------------------------------------

Avatar billede steffen Nybegynder
07. september 2000 - 11:50 #5
Lækkert - det ser lovende ud .. vender tilbage, hvis det lykkes mig at tilpasse den til redhat\'en.
Avatar billede steffen Nybegynder
07. september 2000 - 14:26 #6
Hmmm kan ikke lige regne ud om det vil føre nogen vegne:

<?
include (\'telnet.inc.php3\');
$TF = new telnet_class;
$TF->hostname=\"localhost\";
$TF->Open();
?>

Går i stå, problemområdet er GetLine, hvor fgets aldrig returnerer:

  $line.=fgets($this->connection,100);
  $length=strlen($line);
  if($length>=2
  && substr($line,$length-2,2)== \"\\r\\n\")
    return(substr($line,0,$length-2));
  }

Jeg afviser svaret indtil videre, håber stadig på en testet version :-)
Avatar billede steffen Nybegynder
07. september 2000 - 14:28 #7
Jeg skylder at sige, at selve forbindelsen oprettes godt nok - men der er ingen kommunikation over den: /var/log/secure melder fint:

Sep  7 14:19:28 10 in.telnetd[8703]: connect from 127.0.0.1
Avatar billede steffen Nybegynder
17. september 2000 - 22:59 #8
Lukker spørgsmålet.

Har dog ingen løsning, så hvis én dukker op med en sådan, er point\'ene gerne givet ud stadigvæk.
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

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