[ruby-dev:3443] telnet.rb

From: WATANABE Tetsuya <tetsu@...>
Date: 1998-08-05 01:20:05 UTC
List: ruby-dev #3443
わたなべてつやです。

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

In This Thread

Prev Next