ホームページ  >  記事  >  バックエンド開発  >  php_PHP チュートリアルに実装された Telnet 関数の例

php_PHP チュートリアルに実装された Telnet 関数の例

WBOY
WBOYオリジナル
2016-07-13 10:34:35745ブラウズ

コードをコピーします コードは次のとおりです:

class PHPTelnet {
var $show_connect_error=1;

var $use_usleep=0;  // 実行を高速化するには 1 に変更します
// PHP 5 がない限り、Windows サーバーでは 1 に変更しないでください
var $sleeptime=125000;
var $loginsleeptime=1000000;

var $fp=NULL;
var $ loginprompt;

var $conn1;
var $conn2;

/*
0 = 成功
1 = ネットワーク接続を開けませんでした
2 = 不明なホスト
3 = ログイン失敗
4 = PHP バージョンが低すぎます
*/
function Connect($server,$user,$pass) {
$rv=0;
$vers=explode('.',PHP_VERSION);
$needvers=array(4,3,0);
$j= count($vers);
$k=count($needvers);
if ($k<$j) $j=$k;
for ($i=0;$i<$j;$i++) {
if (($vers[$i]+0)>$needvers[$i]) Break;
if (($vers[$i]+0) $this- >ConnectError(4);
return 4;
}
}

$this->Disconnect();

if (strlen($server)) if (preg_match('/[^0-9. ]/',$server)) {
$ip=gethostbyname($server);
if ($ip==$server) {
$rv=2;
}
} else $ip =$サーバー;
}else $ip='127.0.0.1';

if (strlen($ip)) {
if ($this->fp=fsockopen($ip,23)) {
fputs($this->fp, $this->conn1);
$this->Sleep();

fputs($this->fp,$this->conn2);
$this->Sleep() ;
$this ->GetResponse($r);
$r=explode("n",$r);
$this->loginprompt=$r[count($r)-1];

fputs($this- >fp,"$usern");
$this->Sleep();

fputs($this->fp,"$passn");
if ($this->use_usle ep) usleep($ this->loginsleeptime);
else sleep(1);
$this->GetResponse($r);
$r=explode("n",$r);
if (($r[count($ r)-1]=='')||($this->loginprompt==$r[count($r)-1])) {
$rv=3;
$this->Disconnect() ;
}
} else $rv=1;
}

if ($rv) $this->ConnectError($rv);
return $rv;
}

関数 切断($exit=1) {
if ($this->fp) {
if ($exit) $this->DoCommand('exit',$junk);
fclose($this->fp);
$this->fp= NULL;
}
}

function DoCommand($c,&$r) {
if ($this->fp) {
fputs($this->fp,"$cn");
$this- >Sleep();
$this->GetResponse($r);
$r=preg_replace("/^.*?n(.*)n[^n]*$/","$1",$ r);
}
return $this->fp?1:0;
}

function GetResponse(&$r) {
$r='';
do {
$r .=fread($this- >fp, 1024);
$s=socket_get_status($this->fp);
} while ($s['unread_bytes']);
}

function Sleep() {
if ($this->use_usleep) usleep($this->sleeptime);
else sleep(1);
}

function PHPTelnet() {
$this->conn1 =chr(0xFF).chr(0xFB).chr(0x1F).chr(0xFF).chr(0xFB).
chr(0x20).chr(0xFF).chr(0xFB).chr(0x18).chr(0xFF) ).chr(0xFB).
chr(0x27).chr(0xFF).chr(0xFD).chr(0x01).chr(0xFF).chr(0xFB).
chr(0x03).chr(0xFF).chr (0xFD).chr(0x03).chr(0xFF).chr(0xFC).
chr(0x23).chr(0xFF).chr(0xFC).chr(0x24).chr(0xFF).chr(0xFA)。
chr(0x1F).chr(0x00).chr(0x50).chr(0x00).chr(0x18).chr(0xFF).
chr(0xF0).chr(0xFF).chr(0xFA).chr(0x20) ).chr(0x00).chr(0x33).
chr(0x38).chr(0x34).chr(0x30).chr(0x30).chr(0x2C).chr(0x33).
chr(0x38).chr (0x34).chr(0x30).chr(0x30).chr(0xFF).chr(0xF0).
chr(0xFF).chr(0xFA).chr(0x27).chr(0x00).chr(0xFF)。 chr(0xF0).
chr(0xFF).chr(0xFA).chr(0x18).chr(0x00).chr(0x58).chr(0x54).
chr(0x45).chr(0x52).chr(0x4D) ).chr(0xFF).chr(0xF0);
$this->conn2=chr(0xFF).chr(0xFC).chr(0x01).chr(0xFF).chr(0xFC).
chr(0x22) .chr(0xFF).chr(0xFE).chr(0x05).chr(0xFF).chr(0xFC).chr(0x21);
}

関数 ConnectError($num) {
if ($this-> show_connect_error) スイッチ ($num) {
ケース 1: echo '
[PHP Telnet] 接続失敗: ネットワーク接続を開けません
'; Break;
ケース 2: echo '
[PHP Telnet] 接続に失敗しました: 不明なホスト
'; Break;
ケース 3: echo '
[PHP Telnet] 接続失敗: ログイン失敗しました
'; Break;
ケース 4: echo '
[PHP Telnet] 接続に失敗しました: サーバーの PHP バージョンは、PHP Telnet には低すぎます
';休憩;
}
}
}

?>

www.bkjia.com本当http://www.bkjia.com/PHPjc/750857.html技術記事例: ?php class PHPTelnet { var $show_connect_error=1; var $use_usleep=0; // 実行を高速化するには 1 に変更します // 次の場合を除き、Windows サーバーでは 1 に変更しないでください...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。