class Xploit::Sock

Attributes

debug[RW]
timeout[RW]

Public Class Methods

new(host, port, timeout = nil, debug = false) click to toggle source
# File lib/xploit/sock.rb, line 15
def initialize(host, port, timeout = nil, debug = false)
  @sock = TCPSocket.open(host, port)
  @timeout = 0.5
  @debug = debug
  puts "[\e[32m*\e[0m] Connect to #{host}:#{port}"
end
open(host, port, timeout = nil, debug = false) { |s| ... } click to toggle source
# File lib/xploit/sock.rb, line 22
def self.open(host, port, timeout = nil, debug = false)
  if block_given?
    s = Sock.new(host, port, timeout, debug)
    yield(s)
    s.close
  else
    Sock.new(host, port, timeout, debug)
  end
end

Public Instance Methods

close() click to toggle source
# File lib/xploit/sock.rb, line 88
def close
  puts "[\e[32m*\e[0m] Close the connection"
  @sock.close
end
recv(n = nil, delim = nil) click to toggle source
# File lib/xploit/sock.rb, line 48
def recv(n = nil, delim = nil)
  
  puts "[ \e[35mRECV\e[0m ]" if @debug
  
  unless n.nil?
    res = @sock.read(n)
    Hexdump.dump(res) if @debug
    return res
  end
  
  res = ""
  while select([@sock], nil, nil,timeout=@timeout)
    s = @sock.read(1)
    raise RecvError if s.length != 1
    res << s
    break res if not delim.nil? and res.include?(delim)
  end
  
  Hexdump.dump(res) if @debug
  
  res
  
end
recvline() click to toggle source
# File lib/xploit/sock.rb, line 76
def recvline()
  recvuntil("\n")
end
recvuntil(delim) click to toggle source
# File lib/xploit/sock.rb, line 72
def recvuntil(delim)
  self.recv(n = nil, delim)
end
send(data) click to toggle source
# File lib/xploit/sock.rb, line 32
def send(data)
  
  puts "[\e[34m SEND \e[0m]" if @debug
  len = @sock.write(data)
  raise SendError if len != data.bytesize
             
  Hexdump.dump(data) if @debug
   
  return len
   
end
sendline(msg) click to toggle source
# File lib/xploit/sock.rb, line 44
def sendline(msg)
  send(msg + "\n")
end
shell() click to toggle source
# File lib/xploit/sock.rb, line 80
def shell
  STDOUT.sync = true
  while s = STDIN.gets
    self.send(s)
    puts self.recv(n = nil, delim = nil)
  end
end