phpbar.de logo

Mailinglisten-Archive

[php] Telnet Verbindung mit PHP

[php] Telnet Verbindung mit PHP

Thies C. Arntzen php_(at)_phpcenter.de
Sat, 15 Sep 2001 11:48:35 +0200


--bg08WKrSYDhXBjb5
Content-Type: text/plain; charset=iso-8859-1
Content-Disposition: inline
Content-Transfer-Encoding: 8bit

On Fri, Sep 14, 2001 at 09:29:52AM +0200, Egon Schmid wrote:
> Marc Linke wrote:
> > 
> > Ist es möglich mit PHP eine Telnet Verbindung zu einem
> > anderen Rechner aufzubauen und dort ein Kommando
> > auszuführen?
> > 
> > Also warten auf "Login", Senden Username.
> > Warten auf "Password", Senden Passwort.
> > Warten auf Promt und Senden des Kommandos.
> > Ende.
> > 
> > Geht das mit den beta-Socket-Funktionen der CVS-Version?
> > Weiss jemand wie?
> 
> Ich bestimmt nicht. Es soll ja auch ohne PHP gehen. ssh soll sicherer
> sein wie eine telnet Verbindung, wurde mir erst kürzlich von meinem ISP
> eingebleult.

    hier eine kleine telnet klasse - wenig error-checking, aber
    "geht".

    tc

--bg08WKrSYDhXBjb5
Content-Type: text/plain; charset=iso-8859-1
Content-Disposition: attachment; filename="telnet.php"

<?
error_reporting(-1);

class Telnet {
	// thies_(at)_thieso.net 2001

	var $sock = NULL;

	function telnet($host,$port) {
        $this->sock = fsockopen($host,$port);
		socket_set_timeout($this->sock,2,0);
	}	

    function close() {
        if ($this->sock)
            fclose($this->sock);
        $this->sock = NULL;
	}

    function write($buffer) {
		$buffer = str_replace(chr(255),chr(255).chr(255),$buffer);
        fwrite($this->sock,$buffer); 
	}

	function getc() {
		return fgetc($this->sock);
	}

    function read_till($what)  {
        $buf = '';
		while (1) {
			$IAC  = chr(255); 

			$DONT = chr(254);
			$DO   = chr(253);

			$WONT = chr(252);
			$WILL = chr(251);

			$theNULL = chr(0);

			$c = $this->getc();

			if ($c === false) 
			  return $buf;

			if ($c == $theNULL) {
				continue;
			}

			if ($c == "\021") {
				continue;
			}

			if ($c != $IAC) {
				$buf .= $c;

				if ($what == (substr($buf,strlen($buf)-strlen($what)))) {
					return $buf;
				} else { 
					continue;
				}
			}

			$c = $this->getc();

			if ($c == $IAC) {
				$buf .= $c;
			} else if (($c == $DO) || ($c == $DONT)) {
				$opt = $this->getc();
			//	echo "we wont ".ord($opt)."\n";
				fwrite($this->sock,$IAC.$WONT.$opt); 
			} elseif (($c == $WILL) || ($c == $WONT)) {
				$opt = $this->getc(); 
			//	echo "we dont ".ord($opt)."\n";
				fwrite($this->sock,$IAC.$DONT.$opt); 
			} else {
			//	echo "where are we? c=".ord($c)."\n";
			}
		}

	}
}

$tn = new telnet("192.168.255.100",23);
echo $tn->read_till("ogin: ");
$tn->write("admin\r\n");
echo $tn->read_till("word: ");
$tn->write("thieso\r\n");
echo $tn->read_till(":> ");
$tn->write("ps\r\n");
echo $tn->read_till(":> ");
echo $tn->close();
?>

--bg08WKrSYDhXBjb5--


php::bar PHP Wiki   -   Listenarchive