php实现telnet功能示例


Posted in PHP onApril 08, 2014
<?php
class PHPTelnet {
    var $show_connect_error=1;    var $use_usleep=0;  // change to 1 for faster execution
        // don't change to 1 on Windows servers unless you have PHP 5
    var $sleeptime=125000;
    var $loginsleeptime=1000000;
    var $fp=NULL;
    var $loginprompt;
    var $conn1;
    var $conn2;
    /*
    0 = success
    1 = couldn't open network connection
    2 = unknown host
    3 = login failed
    4 = PHP version too low
    */
    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)<$needvers[$i]) {
                $this->ConnectError(4);
                return 4;
            }
        }
        $this->Disconnect();
        if (strlen($server)) {
            if (preg_match('/[^0-9.]/',$server)) {
                $ip=gethostbyname($server);
                if ($ip==$server) {
                    $ip='';
                    $rv=2;
                }
            } else $ip=$server;
        } 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,"$user\n");
                $this->Sleep();
                fputs($this->fp,"$pass\n");
                if ($this->use_usleep) 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;
    }
    function Disconnect($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,"$c\n");
            $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);
    }
    function ConnectError($num) {
        if ($this->show_connect_error) switch ($num) {
        case 1: echo '<br />[PHP Telnet] <a href="https://3water.com/php-telnet/errors/fsockopen.php">Connect failed: Unable to open network connection</a><br />'; break;
        case 2: echo '<br />[PHP Telnet] <a href="https://3water.com/php-telnet/errors/unknown-host.php">Connect failed: Unknown host</a><br />'; break;
        case 3: echo '<br />[PHP Telnet] <a href="https://3water.com/php-telnet/errors/login.php">Connect failed: Login failed</a><br />'; break;
        case 4: echo '<br />[PHP Telnet] <a href="https://3water.com/php-telnet/errors/php-version.php">Connect failed: Your server\'s PHP version is too low for PHP Telnet</a><br />'; break;
        }
    }
}
?>
PHP 相关文章推荐
php 时间计算问题小结
Jan 04 PHP
PHP stream_context_create()作用和用法分析
Mar 29 PHP
奇怪的PHP引用效率问题分析
Mar 23 PHP
解析PHP实现多进程并行执行脚本
Jun 18 PHP
PHP弹出提示框并跳转到新页面即重定向到新页面
Jan 24 PHP
curl不使用文件存取cookie php使用curl获取cookie示例
Jan 26 PHP
Codeigniter整合Tank Auth权限类库详解
Jun 12 PHP
PHP+Mysql树型结构(无限分类)数据库设计的2种方式实例
Jul 15 PHP
php模拟用户自动在qq空间发表文章的方法
Jan 07 PHP
服务器迁移php版本不同可能诱发的问题
Dec 22 PHP
Laravel下生成验证码的类
Nov 15 PHP
TP5(thinkPHP5)框架基于ajax与后台数据交互操作简单示例
Sep 03 PHP
C#使用PHP服务端的Web Service通信实例
Apr 08 #PHP
php实现水仙花数的4个示例分享
Apr 08 #PHP
php命令行使用方法和命令行参数说明
Apr 08 #PHP
php实现httpclient类示例
Apr 08 #PHP
php使用json_encode对变量json编码
Apr 07 #PHP
php使用正则表达式提取字符串中尖括号、小括号、中括号、大括号中的字符串
Apr 05 #PHP
PHP中的Memcache详解
Apr 05 #PHP
You might like
深入解析php模板技术原理【一】
2008/01/10 PHP
php实现mysql事务处理的方法
2014/12/25 PHP
PHP防盗链的基本思想 防盗链的设置方法
2015/09/25 PHP
laravel高级的Join语法详解以及使用Join多个条件
2019/10/16 PHP
基于jquery的仿百度的鼠标移入图片抖动效果
2010/09/17 Javascript
js 回车提交表单两种实现方法
2012/12/31 Javascript
jquery判断RadioButtonList和RadioButton中是否有选中项示例
2013/09/29 Javascript
jquery队列queue与原生模仿其实现方法分享
2014/03/25 Javascript
node.js中的fs.chown方法使用说明
2014/12/16 Javascript
Node.js的包详细介绍
2015/01/14 Javascript
基于JS实现的倒计时程序实例
2015/07/24 Javascript
javascript中日期函数new Date()的浏览器兼容性问题
2015/09/05 Javascript
跟我学习javascript的最新标准ES6
2015/11/20 Javascript
JavaScript位移运算符(无符号) &gt;&gt;&gt; 三个大于号 的使用方法详解
2016/03/31 Javascript
jQuery基于xml格式数据实现模糊查询及分页功能的方法
2016/12/25 Javascript
webpack多入口文件页面打包配置详解
2018/01/09 Javascript
详解基于electron制作一个node压缩图片的桌面应用
2019/01/29 Javascript
Node.JS如何实现JWT原理
2020/09/18 Javascript
Python文件处理
2016/02/29 Python
python中的lambda表达式用法详解
2016/06/22 Python
Redis使用watch完成秒杀抢购功能的代码
2018/05/07 Python
python实现随机漫步算法
2018/08/27 Python
python基于itchat模块实现微信防撤回
2019/04/29 Python
Django框架 Pagination分页实现代码实例
2019/09/04 Python
利用python实现逐步回归
2020/02/24 Python
vscode写python时的代码错误提醒和自动格式化的方法
2020/05/07 Python
Python如何实现自带HTTP文件传输服务
2020/07/08 Python
python利用appium实现手机APP自动化的示例
2021/01/26 Python
车间调度岗位职责
2013/11/30 职场文书
致裁判员加油稿
2014/02/08 职场文书
开学典礼策划方案
2014/05/28 职场文书
学校党的群众路线教育实践活动总结报告
2014/07/03 职场文书
2014年村计划生育工作总结
2014/11/14 职场文书
2019企业给员工的慰问信
2019/06/24 职场文书
创业计划书之川味火锅店
2019/09/02 职场文书
Redis主从配置和底层实现原理解析(实战记录)
2021/06/30 Redis