Class: Xploit::Sock

Inherits:
Object
  • Object
show all
Defined in:
lib/xploit/sock.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(host, port, timeout = nil, debug = false) ⇒ Sock

Returns a new instance of Sock.



15
16
17
18
19
20
# 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

Instance Attribute Details

#debugObject

Returns the value of attribute debug.



13
14
15
# File 'lib/xploit/sock.rb', line 13

def debug
  @debug
end

#timeoutObject

Returns the value of attribute timeout.



13
14
15
# File 'lib/xploit/sock.rb', line 13

def timeout
  @timeout
end

Class Method Details

.open(host, port, timeout = nil, debug = false) ⇒ Object



22
23
24
25
26
27
28
29
30
# 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

Instance Method Details

#closeObject



91
92
93
94
# File 'lib/xploit/sock.rb', line 91

def close
  puts "[\e[32m*\e[0m] Close the connection"
  @sock.close
end

#recv(n = nil, delim = nil, debug = false) ⇒ Object



50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
# File 'lib/xploit/sock.rb', line 50

def recv(n = nil, delim = nil, debug = false)
  
  @debug = debug
  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(debug = false) ⇒ Object



79
80
81
# File 'lib/xploit/sock.rb', line 79

def recvline(debug = false)
  recvuntil("\n", debug)
end

#recvuntil(delim, debug = false) ⇒ Object



75
76
77
# File 'lib/xploit/sock.rb', line 75

def recvuntil(delim, debug = false)
  self.recv(n = nil, delim, debug)
end

#send(data, debug = false) ⇒ Object

Raises:



32
33
34
35
36
37
38
39
40
41
42
43
44
# File 'lib/xploit/sock.rb', line 32

def send(data, debug = false)
  
  @debug = debug
  
  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, debug = false) ⇒ Object



46
47
48
# File 'lib/xploit/sock.rb', line 46

def sendline(msg, debug = false)
  send(msg + "\n", debug = debug)
end

#shellObject



83
84
85
86
87
88
89
# File 'lib/xploit/sock.rb', line 83

def shell
  STDOUT.sync = true
  while s = STDIN.gets
    self.send(s, @debug)
    puts self.recv(n = nil, delim = nil, debug = @debug)
  end
end