如何将命令发送到在 perl 的非标准端口上运行的 telnet

Posted

技术标签:

【中文标题】如何将命令发送到在 perl 的非标准端口上运行的 telnet【英文标题】:how to send command to telnet which is running on non standard port in perl 【发布时间】:2012-01-25 07:20:29 【问题描述】:

我有一个用 perl 编写的守护进程,它侦听端口 8622 上的自定义命令。

现在我想编写一个可以使用 telnet 命令调用守护进程的客户端程序。客户端程序必须获取输出并根据接收到的输出进一步处理。

我没有在 8622 端口上运行的 telnet 的用户名密码。

以下是我的客户端程序代码

#!/usr/bin/perl -wl 
use Net::Telnet;

$port = 8622;
$IP = '127.0.0.1';
$cmd = "CSDD"; #command to send

 $telnet = new Net::Telnet ( Timeout=>5, port=>$port, Errmode=>'die',Prompt => '/\$ $/i');
$telnet->open($IP);
#$telnet->login('',''); 

print $telnet->cmd($cmd);
$telnet->close;
exit;

守护进程接收到命令,但即使没有任何条件检查,它仍然在无限循环中运行。

如果我从命令提示符运行 telnet,守护进程可以正常工作。

我希望我用我蹩脚的英语解释得正确。 我对 perl 很陌生,所以请帮帮我。

提前致谢:)

【问题讨论】:

【参考方案1】:

提示真的是一个美元符号后跟一个空格吗?尝试使用'/\$ ?$/i' 或其他变体。有printwaitfor 方法提供比cmd 更低级别的接口,想必它们会起作用。

【讨论】:

感谢您的建议,现在守护进程正确地接受了客户端程序发送的命令,但我无法获取从守护进程发送到客户端程序的数据。我正在通过以下方式捕捉......再次感谢您的及时回复 [code] $telnet->waitfor('/​​^$/'); $telnet->打印($cmd); $result = $telnet->waitfor('/​​^$/');打印$结果; [code] 它只输出1 我如何获取守护进程发送的数据?上面的代码正确吗?再次感谢您的及时答复:) 更多关于守护进程的信息 守护进程接受来自客户端程序的套接字连接,然后将数据发送回客户端程序 [code]print SOCK "this is the result"; [代码]

以上是关于如何将命令发送到在 perl 的非标准端口上运行的 telnet的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Perl 通过 TCP 和 UDP 连接到远程机器?

路由到在默认端口上通过 Docker 运行的不同 SQL Server 实例

将带有第一个请求的 html 页面返回到在端口 5000 本地运行的 Json Rpc Dispatcher 服务器

将异步任务发送到在其他线程中运行的循环

在 Perl 中,如何在命令行上发送 CGI 参数?

nginx - 将请求标头变量作为查询参数传递给上游 URL