【问题标题】:Verifying if TELNET command is completed验证 TELNET 命令是否完成
【发布时间】:2015-04-09 06:37:47
【问题描述】:

如何使用 C 中的原始 telnet 选项验证客户端发出的 TELNET 命令是否在服务器上完成?

recv(...) 等待缓冲区输入,但不等到命令完成。

等待是否需要在套接字级别?或者,是否有一个 TELNET 选项? (我通过搜索还没有找到)

man socket 显示可以使用 select/poll 来验证 socket FD 是否可以读/写;但我认为这不是正确的方法。

任何帮助或至少是指导都会有所帮助。

【问题讨论】:

  • 当你得到一个提示字符串时?
  • 我正在与多个程序进行通信,它们各自都有提示字符串。这是我最初的想法。这将是一种肮脏的解决方法,但我相信还有更优雅的方法。
  • 您是否正在尝试编写自己的 telnet 服务器?你读过 Telnet 规范了吗? Telnet 命令对它们具有非常特殊的结构。您正在从套接字读取原始数据,因此您必须解析收到的内容,如果命令不完整,则必须返回套接字并读取更多原始字节以在循环中完成解析、读取和解析需要,直到您收到完整的命令,然后您可以处理它。这是基本的套接字编程 101 种东西。

标签: c sockets telnet


【解决方案1】:

假设您的意思是您在远程主机上运行的命令,而不是 telnet 命令(IAC DON'T ECHO 等),则无法执行您想要的操作。 telnet 连接只是一个终端,来回传递字符。它不知道这些字符中的任何一个是否代表对另一端程序的命令和响应。

所以真正的问题是如何以编程方式操作一些专为交互式使用而设计的命令行界面。答案将取决于命令行界面本身,而不是您用来连接它的方法(telnet、ssh、RS232 串行......无论如何您都会遇到同样的问题)。

为命令行界面设计的操作员需要理解提示,并且还需要足够智能以响应未出现的预期提示。为特定的命令行界面编写一个程序来执行此操作可能很困难,除非你很幸运并且它有一个命令可以进入具有结构化响应的非交互模式。

人们通常用来编写这类程序的工具是expect。

【讨论】:

  • 谢谢。我会解决的。
猜你喜欢
  • 1970-01-01
  • 2012-07-28
  • 1970-01-01
  • 2022-03-24
  • 2018-09-15
  • 2019-02-02
  • 1970-01-01
  • 2019-04-17
  • 2010-11-15
相关资源
最近更新 更多