In-Reply-To: [ruby-list:6694] telnet

助田さん、おはようございます。

>>[ruby-list:6694] telnet
>>From: 助田 雅紀 	 <masaki.suketa / tonen.co.jp>
>>
>>どなたか Perl の Net-Telnet みたいなライブラリ作った
>>方いませんか?

残念ながら作ってはいませんが、うまくいっていないというのは、telnet の
プロトコルが http のように見やすいものではないからでしょう。

最後に付けたようなスクリプトで telnet のやりとりを見てみたのですが、こ
んな感じのようです。

右側の説明は「インターネットシステムハンドブック」(インプレス)という本
に載っていたものです。

ちょっと Telnet.pm は必要なライブラリもあわせると大きいので簡単には移
植できませんが、似たような動きをさせるだけなら簡単そうなので後で作って
みます。

server:"\377"   255    次のオクテットを制御コードとして解釈せよ
server:"\375"   253    指定されたオプションを実行する事を期待する
server:"\030"   24     端末の種類
server:"\377"   255
server:"\375"   253
server:" "      32     端末速度
server:"\377"   255
server:"\375"   253
server:"#"      35     X ディスプレイ配置
server:"\377"   255
server:"\375"   253
server:"'"      39     ?
cliant:"\377"   255
cliant:"\373"   251    指定されたオプションについて、実行を開始するか確認
cliant:"\030"   24
cliant:"\377"   255
cliant:"\373"   251
cliant:" "      32
cliant:"\377"   255
cliant:"\373"   251
cliant:"#"      35
cliant:"\377"   255
cliant:"\373"   251
cliant:"'"      39
server:"\377"   255
...


#!/usr/local/bin/ruby

require "socket"
require "thread"

port = TCPserver.open(2323)
cliant = port.accept
server = TCPsocket.open("localhost", 23)

Thread.start do
  while TRUE
    while c = server.read(1)
      print "server:", c.inspect, "\t", c.unpack("C"), "\n"
      cliant << c
    end
  end
end

while TRUE
  while c = cliant.read(1)
    print "cliant:", c.inspect, "\t", c.unpack("C"), "\n"
    server << c
  end
end


青山 和光 Wakou Aoyama <pxn11625 / niftyserve.or.jp>