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下判断数组中是否存在相同的值array_unique
Mar 25 PHP
深入php 正则表达式的学习探讨
Jun 06 PHP
使用openssl实现rsa非对称加密算法示例
Jan 24 PHP
linux下使用crontab实现定时PHP计划任务失败的原因分析
Jul 05 PHP
ThinkPHP多语言支持与多模板支持概述
Aug 22 PHP
php实现图片文件与下载文件防盗链的方法
Nov 03 PHP
主流PHP框架的优缺点对比分析
Dec 25 PHP
php获取twitter最新消息的方法
Apr 14 PHP
24条货真价实的PHP代码优化技巧
Jul 28 PHP
删除PHP数组中头部、尾部、任意元素的实现代码
Apr 10 PHP
PHP多进程编程之僵尸进程问题的理解
Oct 15 PHP
PHP面向对象程序设计重载(overloading)操作详解
Jun 13 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 分页分组类
2009/12/10 PHP
PHP错误提示的关闭方法详解
2013/06/23 PHP
PHP函数分享之curl方式取得数据、模拟登陆、POST数据
2014/06/04 PHP
CodeIgniter输出中文乱码的两种解决办法
2014/06/12 PHP
PHP实现数组递归转义的方法
2014/08/28 PHP
编写PHP脚本过滤用户上传的图片
2015/07/03 PHP
64位windows系统下安装Memcache缓存
2015/12/06 PHP
浅谈PHP的exec()函数无返回值排查方法(必看)
2017/03/31 PHP
PHP命名空间namespace及use的简单用法分析
2018/08/03 PHP
php实现 master-worker 守护多进程模式的实例代码
2019/07/20 PHP
js实现权限树的更新权限时的全选全消功能
2009/02/17 Javascript
jQuery中children()方法用法实例
2015/01/07 Javascript
js 实现省市区三级联动菜单效果
2017/02/20 Javascript
一次记住JavaScript的6个正则表达式方法
2018/02/22 Javascript
详解超简单的react服务器渲染(ssr)入坑指南
2019/02/28 Javascript
jquery实现掷骰子小游戏
2019/10/24 jQuery
NodeJs crypto加密制作token的实现代码
2019/11/15 NodeJs
jquery.validate自定义验证用法实例分析【成功提示与择要提示】
2020/06/06 jQuery
python使用reportlab实现图片转换成pdf的方法
2015/05/22 Python
python轻松查到删除自己的微信好友
2016/01/10 Python
Python Nose框架编写测试用例方法
2017/10/26 Python
对Python 网络设备巡检脚本的实例讲解
2018/04/22 Python
pycharm下查看python的变量类型和变量内容的方法
2018/06/26 Python
python实现淘宝购物系统
2019/10/25 Python
Python 多线程C段扫描、检测 Ping扫描脚本的实现
2020/09/03 Python
Python存储读取HDF5文件代码解析
2020/11/25 Python
10个顶级Python实用库推荐
2021/03/04 Python
美国知名奢侈美容品牌零售商:Cos Bar
2017/04/21 全球购物
专注澳大利亚特产和新西兰特产的澳洲中文网:0061澳洲制造
2019/03/24 全球购物
JVM是一个编译程序还是解释程序
2012/09/11 面试题
人力资源主管职责范本
2014/03/05 职场文书
单位消防安全责任书
2014/07/23 职场文书
社区四风存在问题及整改措施
2014/10/26 职场文书
2015年法务工作总结范文
2015/05/23 职场文书
2016年村干部公开承诺书(公开承诺事项)
2016/03/25 职场文书
pandas 实现将NaN转换为None
2021/05/14 Python