class Rex::Ui::Text::Input::Socket

This class implements input against a socket.

Public Class Methods

new(sock) click to toggle source
# File lib/rex/ui/text/input/socket.rb, line 14
def initialize(sock)
  @sock = sock
end

Public Instance Methods

eof?() click to toggle source

Returns whether or not EOF has been reached on stdin.

# File lib/rex/ui/text/input/socket.rb, line 81
def eof?
  @sock.closed?
end
fd() click to toggle source

Returns the file descriptor associated with a socket.

# File lib/rex/ui/text/input/socket.rb, line 88
def fd
  return @sock
end
gets() click to toggle source

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

# File lib/rex/ui/text/input/socket.rb, line 35
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
supports_readline() click to toggle source

Sockets do not currently support readline.

# File lib/rex/ui/text/input/socket.rb, line 21
def supports_readline
  false
end
sysread(len = 1) click to toggle source

Reads input from the raw socket.

# File lib/rex/ui/text/input/socket.rb, line 28
def sysread(len = 1)
  @sock.sysread(len)
end