Telnet在Ruby中不起作用

时间:2013-02-09 23:35:18

标签: 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:0x007f8142321c00 ...
telnet.cmd('ls')  # => "HTTP/1.1 0 ERROR\n\nERROR 0\n" 

我的output_log看起来像:

Trying example_ip...
Connected to example_ip.
HTTP/1.1 0 ERROR

ERROR 0

我知道他的服务器正在运行,我可以连接到它。为什么我不能从Ruby连接?

(来自OSX终端)

$ telnet example_ip 80
Trying example_ip...
Connected to c-example_ip...comcast.net.
Escape character is '^]'.
...
$ ls
_~1     .TRA 22       4096
TRASHE~1.    12          0
FSEVEN~1.    12          0
20110221.LOG  0         73
CONFIG  .     0        573
20110223.LOG  0         95
20110224.LOG  0         17
20110225.LOG  0         17
20110315.LOG  0         73
...

编辑:

我尝试将Binmode设置为false,将Telnetmode设置为false,并为Prompt设置一些不同的值(但我不知道是什么对的就是)。

1 个答案:

答案 0 :(得分:1)

一个问题是你在代码中telnet到端口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]

这将打开与主机上的端口80的连接,在重定向之后,并返回收到的文档。然后打印前100个字符,如下所示:

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

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

您没有说明为什么“需要”telnet到Web服务器。它们不支持您可以通过正常的telnet会话发出的相同命令,并且不会授予您访问文件系统的权限,除非为此目的编写了代码。