graze / telnet-client
使用 PHP 编写的 Telnet 客户端
Requires
- php: >5.5.0
- clue/socket-raw: ^1.3
Requires (Dev)
- graze/standards: ^2.0
- mockery/mockery: ^0.9.4
- phpunit/phpunit: ^5.0
- squizlabs/php_codesniffer: ^3.5.0
- symfony/var-dumper: ^3.0
This package is auto-updated.
Last update: 2024-09-17 04:30:07 UTC
README
使用 PHP 编写的 Telnet 客户端
安装
通过 Composer
composer require graze/telnet-client
使用方法
实例化客户端
使用 factory
方法返回一个 TelnetClientInterface
实例
$client = Graze\TelnetClient\TelnetClient::factory();
发布命令
使用 connect
方法连接到远程端点
$dsn = '127.0.0.1:23'; $client->connect($dsn);
一旦连接成功,可以使用 execute
方法将 $command
写入套接字
$command = 'Open the pod bay doors, HAL'; $resp = $client->execute($command);
响应
发送命令后,套接字将读取直到遇到特定的序列。这通常是紧跟在提示符或错误提示符之后的行结束符。此时,execute
方法返回一个 TelnetResponseInterface
对象
/** * Whether an error prompt was encountered. * * @return bool */ public function isError(); /** * Any response from the server up until a prompt is encountered. * * @return string */ public function getResponseText(); /** * The portion of the server's response that caused execute() to return. * * @return array */ public function getPromptMatches();
一个成功响应对象可能看起来像
Graze\TelnetClient\TelnetResponse {#2 #isError: false #responseText: "Affirmative, Dave" #promptMatches: array:1 [ 0 => "$" ] }
或者如果服务器响应了一个错误
Graze\TelnetClient\TelnetResponse {#2 #isError: true #responseText: " I'm sorry, Dave. I'm afraid I can't do that" #promptMatches: array:1 [ 0 => "ERROR" ] }
注意: responseText
和 promptMatches
都已去除行结束符。
客户端配置
客户端使用以下默认值
- 标准提示
$
- 错误提示
ERROR
- 行结束符
\n
可以通过以下方式将自定义配置传递给 connect
方法
$dsn = '127.0.0.1:23'; $prompt = 'OK'; $promptError = 'ERR'; $lineEnding = "\r\n"; $client->connect($dsn, $prompt, $promptError, $lineEnding);
客户端的全局 $prompt
可以在每次执行时临时覆盖
$command = 'login'; $prompt = 'Username:'; $resp = $client->execute($command, $prompt);
复杂的提示
某些操作可能响应更复杂的提示。这些实例可以通过使用 正则表达式 匹配提示来处理。例如,当遇到错误条件时,服务器可能会响应 ERROR n
(其中 n 是一个整数)。客户端可以配置如下
$dsn = '127.0.0.1:23'; $promptError = 'ERROR [0-9]'; $client->connect($dsn, null, $promptError);
一个错误响应可能看起来像
Graze\TelnetClient\TelnetResponse {#2 #isError: true #responseText: "unknown command" #promptMatches: array:1 [ 0 => "ERROR 6" ] }
我们可以通过使用 命名捕获组 进一步完善正则表达式,这使得错误代码在 $promptMatches
数组中易于访问。
$dsn = '127.0.0.1:23'; $promptError = 'ERROR (?<errorNum>[0-9])'; $client->connect($dsn, null, $promptError);
这将给出
Graze\TelnetClient\TelnetResponse {#2 #isError: true #responseText: "unknown command" #promptMatches: array:3 [ 0 => "ERROR 6", "errorNum" => "6", 1 => "6" ] }
注意: 在使用 preg_match 解析时,请确保在正则表达式中转义任何可能具有特殊意义的字符。
套接字设置
有关超时等更多信息,请通过以下方式公开 PHP 的 socket_set_option
$client->getSocket()->setOption();
有关更多信息,请参阅 clue/php-socket-raw 和 socket_set_option
变更日志
请参阅 CHANGELOG 了解最近更改了什么。
测试
make test
贡献
请参阅 CONTRIBUTING 了解详细信息。
安全性
如果您发现任何安全相关的问题,请通过电子邮件 security@graze.com 而不是使用问题跟踪器。
灵感来源
致谢
- John Smith
- Bestnetwork reparto.sviluppo@bestnetwork.it
- 达尔博·安德扎科维奇 dali@swerve.co.nz
- 马克·恩纳吉
- 马蒂亚斯·布拉斯尔 mb@adfinis.ch
- 克里斯蒂安·哈默斯 chammers@netcologne.de
- 所有贡献者
许可协议
MIT许可协议(MIT)。更多信息请参阅许可文件。