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版(2)
Oct 09 PHP
在PHP3中实现SESSION的功能(二)
Oct 09 PHP
PHP5.2下chunk_split()函数整数溢出漏洞 分析
Jun 06 PHP
7个超级实用的PHP代码片段
Jul 11 PHP
php实现信用卡校验位算法THE LUHN MOD-10示例
May 07 PHP
smarty模板判断数组为空的方法
Jun 10 PHP
PHP AjaxForm提交图片上传并显示图片源码
Nov 29 PHP
使用php完成常见的文件上传功能(推荐)
Jan 13 PHP
php利用云片网实现短信验证码功能的示例代码
Nov 18 PHP
微信公众号开发之获取位置信息php代码
Jun 13 PHP
PHP实现的pdo连接数据库并插入数据功能简单示例
Mar 30 PHP
PHP实现统计代码行数小工具
Sep 19 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中去除所有js,html,css代码
2010/10/12 PHP
destoon实现调用自增数字从1开始的方法
2014/08/21 PHP
PHP 的比较运算与逻辑运算详解
2016/05/12 PHP
php微信开发之关注事件
2018/06/14 PHP
如何实现json数据可视化详解
2016/11/24 Javascript
纯JS焦点图特效实例(可一个页面多用)
2016/12/07 Javascript
Node.js学习入门
2017/01/03 Javascript
javascript深拷贝和浅拷贝详解
2017/02/14 Javascript
从对象列表中获取一个对象的方法,依据关键字和值
2017/09/20 Javascript
基于Vue 2.0的模块化前端 UI 组件库小结
2017/12/21 Javascript
vue2.0 循环遍历加载不同图片的方法
2018/03/06 Javascript
微信小程序实现漂亮的弹窗效果
2020/05/26 Javascript
Angular6笔记之封装http的示例代码
2018/07/27 Javascript
vuejs使用axios异步访问时用get和post的实例讲解
2018/08/09 Javascript
小程序图片长按识别功能的实现方法
2018/08/30 Javascript
vue动态设置img的src路径实例
2018/09/18 Javascript
Vue 动态组件components和v-once指令的实现
2019/08/30 Javascript
ElementUI 修改默认样式的几种办法(小结)
2020/07/29 Javascript
[02:34]肉山说——泡妞篇
2014/09/16 DOTA
深入剖析Python的爬虫框架Scrapy的结构与运作流程
2016/01/20 Python
python xlsxwriter创建excel图表的方法
2018/06/11 Python
python 以16进制打印输出的方法
2018/07/09 Python
浅谈Python traceback的优雅处理
2018/08/31 Python
Python中使用logging和traceback模块记录日志和跟踪异常
2019/04/09 Python
Python使用random模块生成随机数操作实例详解
2019/09/17 Python
python多线程高级锁condition简单用法示例
2019/11/07 Python
Python pickle模块实现对象序列化
2019/11/22 Python
pycharm不能运行.py文件的解决方法
2020/02/12 Python
pytorch中 gpu与gpu、gpu与cpu 在load时相互转化操作
2020/05/25 Python
python如何编写win程序
2020/06/08 Python
老海军美国官网:Old Navy
2016/09/05 全球购物
波兰运动鞋网上商店:e-Sporting
2018/02/16 全球购物
奇怪的鱼:Weird Fish
2018/03/18 全球购物
英国最受信任的在线眼镜商之一:Fashion Eyewear
2019/10/31 全球购物
竞选演讲稿范文
2013/12/28 职场文书
医学类个人求职信范文
2014/02/05 职场文书