php实现telnet
使用 PHP 实现 Telnet 连接
在 PHP 中实现 Telnet 连接可以通过 fsockopen 或 socket 扩展完成。以下是两种方法的详细说明:
使用 fsockopen 实现 Telnet
fsockopen 是 PHP 内置函数,适用于简单的 Telnet 连接。
$host = 'example.com';
$port = 23;
$timeout = 30;
$socket = fsockopen($host, $port, $errno, $errstr, $timeout);
if (!$socket) {
die("连接失败: $errstr ($errno)");
}
fwrite($socket, "username\r\n");
fwrite($socket, "password\r\n");
while (!feof($socket)) {
echo fgets($socket, 128);
}
fclose($socket);
使用 socket 扩展实现 Telnet
socket 扩展提供更底层的网络通信控制。

$host = 'example.com';
$port = 23;
$timeout = 30;
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($socket === false) {
die("socket_create() 失败: " . socket_strerror(socket_last_error()));
}
if (!socket_connect($socket, $host, $port)) {
die("socket_connect() 失败: " . socket_strerror(socket_last_error($socket)));
}
$command = "username\r\n";
socket_write($socket, $command, strlen($command));
$command = "password\r\n";
socket_write($socket, $command, strlen($command));
while ($out = socket_read($socket, 2048)) {
echo $out;
}
socket_close($socket);
注意事项
Telnet 协议是明文传输,安全性较低。建议在生产环境中使用 SSH 替代 Telnet。
PHP 的 Telnet 实现通常用于自动化脚本或设备管理,需确保目标设备支持 Telnet 协议。

错误处理
网络连接可能因各种原因失败,建议添加详细的错误处理逻辑。
if (!socket_connect($socket, $host, $port)) {
$errorCode = socket_last_error();
$errorMsg = socket_strerror($errorCode);
die("无法连接到 $host:$port - [$errorCode] $errorMsg");
}
超时设置
为避免脚本长时间挂起,应设置适当的超时时间。
socket_set_option($socket, SOL_SOCKET, SO_RCVTIMEO, array('sec' => $timeout, 'usec' => 0));
socket_set_option($socket, SOL_SOCKET, SO_SNDTIMEO, array('sec' => $timeout, 'usec' => 0));
交互式会话
对于需要交互的 Telnet 会话,可以使用以下模式:
stream_set_blocking($socket, false);
while (true) {
$read = array($socket);
$write = $except = null;
if (stream_select($read, $write, $except, 0, 200000)) {
echo fread($socket, 4096);
}
// 处理用户输入
}






