当前位置:首页 > PHP

php实现telnet

2026-02-28 08:29:38PHP

PHP 实现 Telnet 连接

使用 PHP 实现 Telnet 连接可以通过 fsockopensocket_create 函数创建 Socket 连接,并结合流操作进行通信。以下是两种实现方式:

php实现telnet

使用 fsockopen 实现

$host = 'example.com';
$port = 23;
$timeout = 30;

$socket = fsockopen($host, $port, $errno, $errstr, $timeout);
if (!$socket) {
    echo "连接失败: $errno - $errstr";
} else {
    stream_set_timeout($socket, 2);
    fwrite($socket, "username\r\n");
    fwrite($socket, "password\r\n");

    while (!feof($socket)) {
        echo fgets($socket, 128);
    }
    fclose($socket);
}

使用 socket_create 实现

$host = 'example.com';
$port = 23;
$timeout = 30;

$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($socket === false) {
    echo "Socket 创建失败: " . socket_strerror(socket_last_error());
} else {
    if (socket_connect($socket, $host, $port) === false) {
        echo "连接失败: " . socket_strerror(socket_last_error());
    } else {
        socket_write($socket, "username\r\n");
        socket_write($socket, "password\r\n");

        while ($out = socket_read($socket, 2048)) {
            echo $out;
        }
        socket_close($socket);
    }
}

处理 Telnet 协议选项

Telnet 协议会发送选项协商数据(如 IAC、DO、DONT 等),需处理这些控制字符以避免通信中断:

php实现telnet

function filter_telnet_control($data) {
    $filtered = '';
    $length = strlen($data);
    for ($i = 0; $i < $length; $i++) {
        if (ord($data[$i]) == 255) { // IAC 字符
            $i += 2; // 跳过选项协商的后续字节
        } else {
            $filtered .= $data[$i];
        }
    }
    return $filtered;
}

使用第三方库

对于更复杂的 Telnet 操作,可考虑使用第三方库如 phpseclib

require 'Net/Telnet.php';
$telnet = new Net_Telnet();
if ($telnet->connect('example.com', 23)) {
    $telnet->login('username', 'password');
    echo $telnet->exec('ls');
    $telnet->disconnect();
} else {
    echo "连接失败";
}

注意事项

  • 确保目标服务器允许 Telnet 连接(默认端口 23)。
  • 处理超时和错误情况,避免脚本无响应。
  • 明文传输的 Telnet 协议不安全,建议使用 SSH(如 phpseclib 的 SSH2 模块)。

标签: phptelnet
分享给朋友:

相关文章

php 无限分类的实现

php 无限分类的实现

无限分类的实现方法 无限分类通常用于构建树形结构数据,如商品分类、多级菜单等。以下是几种常见的实现方式: 邻接列表模型(Adjacency List) 邻接列表是最简单的实现方式,通过在每个节点中存…

php变量的实现

php变量的实现

PHP变量的实现机制 PHP变量的实现基于Zend引擎的底层数据结构。核心结构体zval用于存储变量类型和值,其设计允许动态类型转换和高效内存管理。 zval结构体 PHP变量通过zval结构体实现…

php实现注册登陆

php实现注册登陆

PHP 注册功能实现 创建数据库表结构(MySQL示例): CREATE TABLE users ( id INT AUTO_INCREMENT PRIMARY KEY, usern…

php 实现锁

php 实现锁

PHP 实现锁的常见方法 文件锁(flock) 利用 flock 函数对文件进行独占锁定,适用于单机环境。 $fp = fopen("lockfile.lock", "w+"); if (flock…

php实现单例模式

php实现单例模式

单例模式的概念 单例模式是一种创建型设计模式,确保一个类只有一个实例,并提供一个全局访问点。这种模式常用于数据库连接、日志记录器等需要全局唯一实例的场景。 PHP实现单例模式的关键步骤 私有化构造函…

php下载文件实现

php下载文件实现

PHP 下载文件实现方法 使用 header() 函数强制下载 设置合适的 HTTP 头信息,强制浏览器下载文件而非直接打开。 $file_path = '/path/to/file.pdf'; $…