2

私が取り組んでいるプロジェクトのために、同僚のサーバーに 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、正しい値が何であるかはわかりません)。falseTelnetmodefalsePrompt

4

1 に答える 1

1

問題の 1 つは、コード内でポート 80 (HTTPd ポート) に telnet で接続していることです。それがあなたが得ている理由です:

HTTP/1.1 0 ERROR

サーバーは、あなたが などの HTTP コマンドを送信することを期待していますGET /index.htmlが、代わりに "ls" を送信しています。

マシンのコマンドラインでサーバーに接続するために使用しているホスト OS はわかりませんが、そのマシンの 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 サーバーを突く非常に簡単で便利な方法です。

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

Web サーバーに telnet で接続する必要がある理由を説明していません。それらは、通常の telnet セッションを介して発行できるコマンドと同じものをサポートしておらず、それらの目的のためにコードが作成されていない限り、ファイル システムへのアクセスを提供しません。

于 2013-02-09T23:51:58.957 に答える