Sha256: 2ed6c8f51a0d147e260f3e180aefc2ea90203cab25e5448422d7fcc306848a4e

Contents?: true

Size: 1.51 KB

Versions: 15

Compression:

Stored size: 1.51 KB

Contents

# -*- coding: binary -*-
require 'rex/ui'

module Rex
module Ui
module Text

###
#
# This class implements input against a socket.
#
###
class Input::Socket < Rex::Ui::Text::Input

  def initialize(sock)
    @sock = sock
  end

  #
  # Sockets do not currently support readline.
  #
  def supports_readline
    false
  end

  #
  # Reads input from the raw socket.
  #
  def sysread(len = 1)
    @sock.sysread(len)
  end

  #
  # Wait for a line of input to be read from a socket.
  #
  def gets

    # Initialize the line buffer
    line = ''

    # Read data one byte at a time until we see a LF
    while (true)

      break if line.include?("\n")

      # Read another character of input
      char = @sock.getc
      if char.nil?
        @sock.close
        return
      end

      # Telnet sends 0x04 as EOF
      if (char == 4)
        @sock.write("[*] Caught ^D, closing the socket...\n")
        @sock.close
        return
      end

      # Append this character to the string
      line << char

      # Handle telnet sequences
      case line
        when /\xff\xf4\xff\xfd\x06/n
          @sock.write("[*] Caught ^C, closing the socket...\n")
          @sock.close
          return

        when /\xff\xed\xff\xfd\x06/n
          @sock.write("[*] Caught ^Z\n")
          return
      end
    end

    return line
  end

  #
  # Returns whether or not EOF has been reached on stdin.
  #
  def eof?
    @sock.closed?
  end

  #
  # Returns the file descriptor associated with a socket.
  #
  def fd
    return @sock
  end
end

end
end
end

Version data entries

15 entries across 15 versions & 3 rubygems

Version Path
rex-2.0.13 lib/rex/ui/text/input/socket.rb
rex-2.0.12 lib/rex/ui/text/input/socket.rb
rex-2.0.11 lib/rex/ui/text/input/socket.rb
rex-2.0.10 lib/rex/ui/text/input/socket.rb
rex-2.0.9 lib/rex/ui/text/input/socket.rb
rex-2.0.8 lib/rex/ui/text/input/socket.rb
rex-2.0.7 lib/rex/ui/text/input/socket.rb
rex-2.0.5 lib/rex/ui/text/input/socket.rb
rex-2.0.4 lib/rex/ui/text/input/socket.rb
dstruct-0.0.1 lib/rex/ui/text/input/socket.rb
rex-2.0.3 lib/rex/ui/text/input/socket.rb
librex-0.0.999 lib/rex/ui/text/input/socket.rb
rex-2.0.2 lib/rex/ui/text/input/socket.rb
librex-0.0.71 lib/rex/ui/text/input/socket.rb
librex-0.0.70 lib/rex/ui/text/input/socket.rb