Telnet在Ruby中不工作

Telnet在Ruby中不工作,ruby,telnet,Ruby,Telnet,我需要将Telnet连接到我的同事的服务器,以用于我正在处理的项目: telnet = Net::Telnet::new( "Host" => "example_ip", "Port" => 80, "Timeout"=>90, "Waittime" => 1, "Output_log"=>"output_log.log", "Dump_log"=> "dump_log.log" )# => #<Net::Telnet:0x

我需要将Telnet连接到我的同事的服务器,以用于我正在处理的项目:

telnet = Net::Telnet::new(
  "Host" => "example_ip",
  "Port" => 80,
  "Timeout"=>90,
  "Waittime" => 1,
  "Output_log"=>"output_log.log",
  "Dump_log"=> "dump_log.log"
)# => #<Net::Telnet:0x007f8142321c00 ...
telnet.cmd('ls')  # => "HTTP/1.1 0 ERROR\n\nERROR 0\n" 
我知道他的服务器正在运行,我可以连接到它。为什么我不能从Ruby连接

(从OSX终端)


编辑:


我尝试将
Binmode
设置为
false
Telnetmode
设置为
false
,并为
提示符设置了一些不同的值(但我不知道正确的值是什么)。

一个问题是,您正在将代码中的端口80远程登录到HTTPd端口。这就是为什么您会得到:

HTTP/1.1 0 ERROR
服务器希望您发送一个HTTP命令,例如
GET/index.html
,但是您发送的是“ls”

您没有说明您在计算机的命令行上使用什么主机操作系统连接到服务器,但是,该计算机上的telnet命令可能希望使用冒号将port命令与主机IP或FQDN分离:

telnet example_ip:80
未能在该类型的客户端上使用冒号会导致连接到端口23上的标准telnet端口,该端口似乎由
ls
命令备份。端口80上的HTTPd不知道您所说的
ls
是什么意思

您可以使用Telnet协议连接到HTTPd,也可以使用Telnet客户端应用程序。不过,您必须使用正确的命令集。尝试将代码调整为
telnet.cmd(“GET/index.html\r\n”)
,然后查看是否得到响应


编辑:

使用OpenURI进行实验。这是一种非常简单和方便的方式来戳web服务器:

require 'open-uri' doc = open('http://example.com').read puts doc[0, 100] 需要“打开uri” doc=打开('http://example.com)。请阅读 放置文档[0,100] 这将打开到给定主机上端口80的连接,执行重定向并返回收到的文档。然后打印前100个字符,看起来像:

<!doctype html>
<html>
<head>
  <title>Example Domain</title>

  <meta charset="utf-8" />
  <meta http-

示例域

我用的是Mac电脑。试图在另一个端口(例如23,或将端口留空)上连接到他的ip不起作用。无法连接到远程主机。我认为这就是问题所在,您是对的。有什么想法吗?因为他的东西托管在端口80上,我不确定他是否能够再更改它。不要试图向端口80发出telnet命令。使用HTTP客户机,如OpenURI进行实验。我将添加一些示例代码。但它不是web服务器。它是一个实际的Telnet服务器,位于端口80上。我可以通过telnet(使用命令行)发出我希望通过ruby发出的命令。例如,如果我发出“帮助”,我会得到
$help添加管理报警[on | off | monitor | reset |[]aout[mph | m/s]baud[4800 | 9600]cal[anem[on | off |[]vane[on | off | monitor]模拟[on | off |[]off |]]]]…
(抱歉格式化)。这些是远程风速监测站。我正试图集中记录他们的数据。 require 'open-uri' doc = open('http://example.com').read puts doc[0, 100]
<!doctype html>
<html>
<head>
  <title>Example Domain</title>

  <meta charset="utf-8" />
  <meta http-