2013-02-09 30 views
2

不工作,我需要遠程登錄到我的同事對一個項目的服務器我的工作:的Telnet在Ruby中

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 
... 

編輯:

我試圖Telnetmode設置Binmodefalse,到false,而對於一些Prompt不同的值(但我不知道什麼是正確的)。

回答

1

一個問題是,您正在telnet到您的代碼中的端口80,這是HTTPd端口。這就是爲什麼你越來越:

HTTP/1.1 0 ERROR 

服務器盼着你發送一個HTTP命令,如GET /index.html,而是你發送「LS」。

您不說在機器的命令行上用於連接到服務器的主機操作系統,但是,該機器上的telnet命令可能需要將端口命令與主機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會話發出的相同命令,並且不會授予您對文件系統的訪問權限,除非已爲此編寫代碼。

+0

我正在使用Mac。嘗試在不同的端口上連接到他的IP(例如23,或將端口留空)不起作用。無法連接到遠程主機。 – AlexQueue 2013-02-09 23:58:22

+0

我認爲你是對的,這是問題所在。圍繞它的任何想法?因爲他的東西託管在80端口上,我不確定他會不會再改變它。 – AlexQueue 2013-02-10 00:01:06

+0

不要嘗試向端口80發出telnet命令。使用HTTP客戶端,如OpenURI進行試驗。我將添加一些示例代碼。 – 2013-02-10 00:30:19