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实现链结人气统计
Oct 09 PHP
PHP的autoload机制的实现解析
Sep 15 PHP
php网页标题中文乱码的有效解决方法
Mar 05 PHP
php去掉URL网址中带有PHPSESSID的配置方法
Jul 08 PHP
PHP反射机制用法实例
Aug 28 PHP
用 Composer构建自己的 PHP 框架之构建路由
Oct 30 PHP
PHP基于文件存储实现缓存的方法
Jul 20 PHP
织梦sitemap地图实时推送给百度的教程
Aug 03 PHP
PHPStrom 新建FTP项目以及在线操作教程
Oct 16 PHP
PHP实现的mysql主从数据库状态检测功能示例
Jul 20 PHP
PHP实现的获取文件mimes类型工具类示例
Apr 08 PHP
php引用和拷贝的区别知识点总结
Sep 23 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
漂亮的仿flash菜单,来自蓝色经典
2006/06/26 Javascript
获取当前网页document.url location.href区别总结
2008/05/10 Javascript
通过隐藏option实现select的联动效果
2009/11/10 Javascript
javascript 事件处理程序介绍
2012/06/27 Javascript
Javascript获取窗口(容器)的大小及位置参数列举及简要说明
2012/12/09 Javascript
js获取单选框或复选框值及操作
2012/12/18 Javascript
在jQuery中 常用的选择器介绍
2013/04/16 Javascript
Javascript设计模式之观察者模式的多个实现版本实例
2015/03/03 Javascript
js中获取jsp表单中radio类型的值简单实例
2016/08/15 Javascript
AngularJS基于MVC的复杂操作实例讲解
2017/12/31 Javascript
深入理解JavaScript的async/await
2018/08/05 Javascript
vue发送websocket请求和http post请求的实例代码
2019/07/11 Javascript
element-ui tooltip修改背景颜色和箭头颜色的实现
2019/12/16 Javascript
vue 数据遍历筛选 过滤 排序的应用操作
2020/11/17 Javascript
[01:19:23]2018DOTA2亚洲邀请赛 4.5 淘汰赛 Mineski vs VG 第二场
2018/04/06 DOTA
用python实现批量重命名文件的代码
2012/05/25 Python
PyCharm设置护眼背景色的方法
2018/10/29 Python
python 图片去噪的方法示例
2019/07/09 Python
Django的models模型的具体使用
2019/07/15 Python
Python3实现将一维数组按标准长度分隔为二维数组
2019/11/29 Python
Python3连接Mysql8.0遇到的问题及处理步骤
2020/02/17 Python
Python Pandas 对列/行进行选择,增加,删除操作
2020/05/17 Python
python代码实现图书管理系统
2020/11/30 Python
Shopee马来西亚:随拍即卖,最佳行动电商拍卖平台
2017/06/05 全球购物
医生自荐信
2013/10/11 职场文书
高级方案规划工程师岗位职责
2013/11/29 职场文书
酒店保安领班职务说明书
2014/03/04 职场文书
护士毕业实习感言
2014/03/05 职场文书
大学生学期自我鉴定
2014/03/19 职场文书
产品推广策划方案
2014/05/10 职场文书
电子商务优秀毕业生求职信
2014/07/11 职场文书
员工生日活动方案
2014/08/24 职场文书
爱的教育观后感
2015/06/17 职场文书
校运会宣传稿大全
2015/07/23 职场文书
2016年校园重阳节广播稿
2015/12/18 职场文书
nginx代理实现静态资源访问的示例代码
2022/07/07 Servers