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 == 1) {
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;
}
}
}
}
/*
$telnet = new telnet(192.168.0.1,23);
echo $telnet->read_till(login: );
$telnet->write(kongxx\r\n);
echo $telnet->read_till(password: );
$telnet->write(kongxx\r\n);
echo $telnet->read_till(:> );
$telnet->write(ls\r\n);
echo $telnet->read_till(:> );
echo $telnet->close();
*/