From: WATANABE Tetsuya Date: 1998-08-05T10:20:05+09:00 Subject: [ruby-dev:3443] telnet.rb わたなべてつやです。 telnet.rb ですが、パッケットが分かれてしまうことがあるようで うまく login できないシステム(HP-UX 10.20)があるようです。 telnet サーバが HP-UX の場合にこの現象が起きました。確認した スクリプトは次のものです。 ------------------------------ require 'telnet' hpshowgw = Telnet.new({ "Host" => "", "Timeout" => 10, "Prompt" => /[$%#>] $/ }) hpshowgw.login("", "") {|c| print c } hpshowgw.cmd("ls") {|c| print c } hpshowgw.close exit ------------------------------ 異常パターンのパケットトレースなのですが、「ff fd 24」(サー バ)に対して、「ff」「fc 24」と答えています。 -------------------------------- TCP Header ---------------------------------- sport: telnet --> dport: 1050 flags: PUSH ACK seq: 0x38a6ee01 urp: 0x0 chksum: 0xdada data len: 3 ack: 0x7c161182 win: 0x8000 optlen: 0 -------------------------------- TELNET -------------------------------------- 0: ff fd 24 -- -- -- -- -- -- -- -- -- -- -- -- -- ..$............. -------------------------------- TCP Header ---------------------------------- sport: 1050 --> dport: telnet flags: ACK seq: 0x7c161182 urp: 0x0 chksum: 0x169 data len: 0 ack: 0x38a6ee04 win: 0x7d78 optlen: 0 -------------------------------- TCP Header ---------------------------------- sport: 1050 --> dport: telnet flags: PUSH ACK seq: 0x7c161182 urp: 0x0 chksum: 0x25f data len: 1 ack: 0x38a6ee04 win: 0x7d78 optlen: 0 -------------------------------- TELNET -------------------------------------- 0: ff -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- ................ -------------------------------- TCP Header ---------------------------------- sport: telnet --> dport: 1050 flags: ACK seq: 0x38a6ee04 urp: 0x0 chksum: 0xfedf data len: 0 ack: 0x7c161183 win: 0x8000 optlen: 0 -------------------------------- TCP Header ---------------------------------- sport: 1050 --> dport: telnet flags: PUSH ACK seq: 0x7c161183 urp: 0x0 chksum: 0x539 data len: 2 ack: 0x38a6ee04 win: 0x7d78 optlen: 0 -------------------------------- TELNET -------------------------------------- 0: fc 24 -- -- -- -- -- -- -- -- -- -- -- -- -- -- .$.............. ということで、次のようなパッチを行い、動作がうまくいくことを 確認しました。採用いただけるようにお願いします。 ------------------------------ --- /t/lib/ruby/telnet.rb Wed Jul 15 15:39:17 1998 +++ newtelnet.rb Wed Aug 5 10:06:11 1998 @@ -166,7 +166,7 @@ # respond to "IAC DO x" or "IAC DON'T x" with "IAC WON'T x" str.gsub!(/([^#{IAC}])?#{IAC}[#{DO}#{DONT}](.|\n)/no){ - @sock << IAC << WONT << $2 + @sock << IAC + WONT + $2 $1 } ------------------------------ # まつもとさん、風邪大丈夫ですか? -- WATANABE Tetsuya HP Japan e-mail tetsu@jpn.hp.com