如何将命令发送到在 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'
或其他变体。有print
和waitfor
方法提供比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 实例