lab 0.0.3 → 0.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/Gemfile +4 -0
- data/Gemfile.lock +16 -0
- data/README +77 -0
- data/Rakefile +1 -0
- data/TODO +15 -0
- data/lab.gemspec +24 -0
- data/lib/lab.rb +4 -0
- data/lib/lab/controller/dynagen_controller.rb +14 -0
- data/lib/lab/controller/fog_controller.rb +6 -0
- data/lib/lab/controller/remote_esx_controller.rb +62 -0
- data/lib/lab/controller/remote_workstation_controller.rb +22 -0
- data/lib/lab/controller/virtualbox_controller.rb +25 -0
- data/lib/lab/controller/workstation_controller.rb +17 -0
- data/lib/lab/controller/workstation_vixr_controller.rb +19 -0
- data/lib/lab/controllers.rb +10 -0
- data/lib/lab/driver/dynagen_driver.rb +47 -0
- data/lib/lab/driver/fog_driver.rb +164 -0
- data/lib/lab/driver/remote_esx_driver.rb +177 -0
- data/lib/lab/driver/remote_workstation_driver.rb +198 -0
- data/lib/lab/driver/virtualbox_driver.rb +142 -0
- data/lib/lab/driver/vm_driver.rb +180 -0
- data/lib/lab/driver/workstation_driver.rb +188 -0
- data/lib/lab/driver/workstation_vixr_driver.rb +126 -0
- data/lib/lab/drivers.rb +8 -0
- data/lib/lab/modifier/backtrack5_modifier.rb +16 -0
- data/lib/lab/modifier/dos_modifier.rb +14 -0
- data/lib/lab/modifier/meterpreter_modifier.rb +167 -0
- data/lib/lab/modifier/test_modifier.rb +16 -0
- data/lib/lab/modifiers.rb +4 -0
- data/lib/lab/version.rb +3 -0
- data/lib/lab/vm.rb +253 -0
- data/lib/lab/vm_controller.rb +238 -0
- data/test/.gitkeep +0 -0
- metadata +39 -6
@@ -0,0 +1,238 @@
|
|
1
|
+
##
|
2
|
+
## $Id$
|
3
|
+
##
|
4
|
+
## This is the main lab controller. Require this controller to get all
|
5
|
+
## lab functionality.
|
6
|
+
##
|
7
|
+
##
|
8
|
+
|
9
|
+
$:.unshift(File.expand_path(File.dirname(__FILE__)))
|
10
|
+
$:.unshift(File.expand_path(File.join(File.dirname(__FILE__), 'driver')))
|
11
|
+
$:.unshift(File.expand_path(File.join(File.dirname(__FILE__), 'controller')))
|
12
|
+
$:.unshift(File.expand_path(File.join(File.dirname(__FILE__), 'modifier')))
|
13
|
+
|
14
|
+
require 'find'
|
15
|
+
require 'yaml'
|
16
|
+
require 'enumerator'
|
17
|
+
require 'fileutils'
|
18
|
+
|
19
|
+
require 'vm'
|
20
|
+
require 'controllers'
|
21
|
+
require 'drivers'
|
22
|
+
require 'modifiers'
|
23
|
+
|
24
|
+
module Lab
|
25
|
+
module Controllers
|
26
|
+
class VmController
|
27
|
+
|
28
|
+
include Enumerable
|
29
|
+
include Lab::Controllers::WorkstationController
|
30
|
+
include Lab::Controllers::VirtualBoxController
|
31
|
+
include Lab::Controllers::FogController
|
32
|
+
include Lab::Controllers::DynagenController
|
33
|
+
include Lab::Controllers::RemoteEsxController
|
34
|
+
include Lab::Controllers::RemoteWorkstationController
|
35
|
+
#include Lab::Controllers::QemuController
|
36
|
+
#include Lab::Controllers::QemudoController
|
37
|
+
def initialize (labdef=nil)
|
38
|
+
|
39
|
+
# Start with an empty array of vm objects
|
40
|
+
@vms = []
|
41
|
+
|
42
|
+
# labdef is a just a big array of hashes
|
43
|
+
load_vms(labdef) if labdef
|
44
|
+
end
|
45
|
+
|
46
|
+
def clear!
|
47
|
+
@vms = []
|
48
|
+
end
|
49
|
+
|
50
|
+
def [](x)
|
51
|
+
# Support indexing by both names and number
|
52
|
+
if x.class == String
|
53
|
+
find_by_vmid(x)
|
54
|
+
else
|
55
|
+
return @vms[x]
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
def find_by_vmid(vmid)
|
60
|
+
@vms.each do |vm|
|
61
|
+
if (vm.hostname.to_s.downcase == vmid.to_s.downcase)
|
62
|
+
return vm
|
63
|
+
end
|
64
|
+
end
|
65
|
+
return nil
|
66
|
+
end
|
67
|
+
|
68
|
+
def add_vm(vmid, location=nil, os=nil, tools=nil, credentials=nil, user=nil, host=nil)
|
69
|
+
@vms << Vm.new( { 'vmid' => vmid,
|
70
|
+
'driver' => type,
|
71
|
+
'location' => location,
|
72
|
+
'credentials' => credentials,
|
73
|
+
'user' => user,
|
74
|
+
'host' => host} )
|
75
|
+
end
|
76
|
+
|
77
|
+
def remove_by_vmid(vmid)
|
78
|
+
@vms.delete(self.find_by_vmid(vmid))
|
79
|
+
end
|
80
|
+
|
81
|
+
def from_file(file)
|
82
|
+
load_vms(YAML::load_file(file))
|
83
|
+
end
|
84
|
+
|
85
|
+
def load_vms(vms)
|
86
|
+
vms.each do |item|
|
87
|
+
vm = Vm.new(item)
|
88
|
+
@vms << vm unless includes_vmid? vm.vmid
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
def to_file(file)
|
93
|
+
File.open(file, 'w') { |f| @vms.each { |vm| f.puts vm.to_yaml } }
|
94
|
+
end
|
95
|
+
|
96
|
+
def each &block
|
97
|
+
@vms.each { |vm| yield vm }
|
98
|
+
end
|
99
|
+
|
100
|
+
def includes?(specified_vm)
|
101
|
+
@vms.each { |vm| if (vm == specified_vm) then return true end }
|
102
|
+
end
|
103
|
+
|
104
|
+
def includes_vmid?(vmid)
|
105
|
+
@vms.each do |vm|
|
106
|
+
return true if (vm.vmid == vmid)
|
107
|
+
end
|
108
|
+
false
|
109
|
+
end
|
110
|
+
|
111
|
+
def build_from_dir(driver_type, dir, clear=false)
|
112
|
+
|
113
|
+
if clear
|
114
|
+
@vms = []
|
115
|
+
end
|
116
|
+
|
117
|
+
if driver_type.downcase == "workstation"
|
118
|
+
vm_list = ::Lab::Controllers::WorkstationController::dir_list(dir)
|
119
|
+
elsif driver_type.downcase == "virtualbox"
|
120
|
+
vm_list = ::Lab::Controllers::VirtualBoxController::dir_list(dir)
|
121
|
+
elsif driver_type.downcase == "fog"
|
122
|
+
vm_list = ::Lab::Controllers::FogController::dir_list(dir)
|
123
|
+
elsif driver_type.downcase == "Dynagen"
|
124
|
+
vm_list = ::Lab::Controllers::DynagenController::dir_list(dir)
|
125
|
+
elsif driver_type.downcase == "remote_workstation"
|
126
|
+
vm_list = ::Lab::Controllers::RemoteWorkstationController::dir_list(dir)
|
127
|
+
elsif driver_type.downcase == "remote_esx"
|
128
|
+
vm_list =::Lab::Controllers::RemoteEsxController::dir_list(dir)
|
129
|
+
else
|
130
|
+
raise TypeError, "Unsupported VM Type"
|
131
|
+
end
|
132
|
+
|
133
|
+
vm_list.each_index do |index|
|
134
|
+
@vms << Vm.new( {'vmid' => "vm_#{index}", 'driver' => driver_type, 'location' => vm_list[index]} )
|
135
|
+
end
|
136
|
+
end
|
137
|
+
|
138
|
+
def build_from_running(driver_type=nil, user=nil, host=nil, clear=false)
|
139
|
+
|
140
|
+
if clear
|
141
|
+
@vms = []
|
142
|
+
end
|
143
|
+
|
144
|
+
case driver_type.intern
|
145
|
+
when :workstation
|
146
|
+
vm_list = ::Lab::Controllers::WorkstationController::running_list
|
147
|
+
|
148
|
+
vm_list.each do |item|
|
149
|
+
|
150
|
+
## Name the VM
|
151
|
+
index = @vms.count + 1
|
152
|
+
|
153
|
+
## Add it to the vm list
|
154
|
+
@vms << Vm.new( { 'vmid' => "vm_#{index}",
|
155
|
+
'driver' => driver_type,
|
156
|
+
'location' => item,
|
157
|
+
'user' => user,
|
158
|
+
'host' => host } )
|
159
|
+
end
|
160
|
+
|
161
|
+
|
162
|
+
when :virtualbox
|
163
|
+
vm_list = ::Lab::Controllers::VirtualBoxController::running_list
|
164
|
+
vm_list.each do |item|
|
165
|
+
## Add it to the vm list
|
166
|
+
@vms << Vm.new( { 'vmid' => "#{item}",
|
167
|
+
'driver' => driver_type,
|
168
|
+
'location' => nil })
|
169
|
+
end
|
170
|
+
when :fog
|
171
|
+
raise "Unsupported" # TODO - figure out a way to allow this
|
172
|
+
when :dynagen
|
173
|
+
raise "Unsupported"
|
174
|
+
when :remote_workstation
|
175
|
+
vm_list = ::Lab::Controllers::RemoteWorkstationController::running_list(user, host)
|
176
|
+
|
177
|
+
vm_list.each do |item|
|
178
|
+
|
179
|
+
## Name the VM
|
180
|
+
index = @vms.count + 1
|
181
|
+
|
182
|
+
## Add it to the vm list
|
183
|
+
@vms << Vm.new( { 'vmid' => "vm_#{index}",
|
184
|
+
'driver' => driver_type,
|
185
|
+
'location' => item,
|
186
|
+
'user' => user,
|
187
|
+
'host' => host } )
|
188
|
+
end
|
189
|
+
when :remote_esx
|
190
|
+
vm_list = ::Lab::Controllers::RemoteEsxController::running_list(user,host)
|
191
|
+
|
192
|
+
vm_list.each do |item|
|
193
|
+
@vms << Vm.new( { 'vmid' => "#{item[:id]}",
|
194
|
+
'name' => "#{item[:name]}",
|
195
|
+
'driver' => driver_type,
|
196
|
+
'user' => user,
|
197
|
+
'host' => host } )
|
198
|
+
end
|
199
|
+
|
200
|
+
else
|
201
|
+
raise TypeError, "Unsupported VM Type"
|
202
|
+
end
|
203
|
+
|
204
|
+
end
|
205
|
+
|
206
|
+
def build_from_config(driver_type=nil, user=nil, host=nil, clear=false)
|
207
|
+
if clear
|
208
|
+
@vms = []
|
209
|
+
end
|
210
|
+
|
211
|
+
case driver_type.intern
|
212
|
+
when :virtualbox
|
213
|
+
vm_list = ::Lab::Controllers::VirtualBoxController::config_list
|
214
|
+
|
215
|
+
vm_list.each do |item|
|
216
|
+
## Add it to the vm list
|
217
|
+
@vms << Vm.new( { 'vmid' => "#{item}",
|
218
|
+
'driver' => driver_type,
|
219
|
+
'location' => nil,
|
220
|
+
'user' => user,
|
221
|
+
'host' => host } )
|
222
|
+
end
|
223
|
+
|
224
|
+
else
|
225
|
+
raise TypeError, "Unsupported VM Type"
|
226
|
+
end
|
227
|
+
|
228
|
+
end
|
229
|
+
|
230
|
+
def running?(vmid)
|
231
|
+
if includes_vmid?(vmid)
|
232
|
+
return self.find_by_vmid(vmid).running?
|
233
|
+
end
|
234
|
+
return false
|
235
|
+
end
|
236
|
+
end
|
237
|
+
end
|
238
|
+
end
|
data/test/.gitkeep
ADDED
File without changes
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: lab
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.4
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2011-12-
|
12
|
+
date: 2011-12-17 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: nokogiri
|
16
|
-
requirement: &
|
16
|
+
requirement: &7082080 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,7 +21,7 @@ dependencies:
|
|
21
21
|
version: '0'
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *7082080
|
25
25
|
description: Start/Stop/Revert and do other cool stuff w/ Vmware, Virtualbox, and
|
26
26
|
ESXi vms
|
27
27
|
email:
|
@@ -29,8 +29,41 @@ email:
|
|
29
29
|
executables: []
|
30
30
|
extensions: []
|
31
31
|
extra_rdoc_files: []
|
32
|
-
files:
|
33
|
-
|
32
|
+
files:
|
33
|
+
- Gemfile
|
34
|
+
- Gemfile.lock
|
35
|
+
- README
|
36
|
+
- Rakefile
|
37
|
+
- TODO
|
38
|
+
- lab.gemspec
|
39
|
+
- lib/lab.rb
|
40
|
+
- lib/lab/controller/dynagen_controller.rb
|
41
|
+
- lib/lab/controller/fog_controller.rb
|
42
|
+
- lib/lab/controller/remote_esx_controller.rb
|
43
|
+
- lib/lab/controller/remote_workstation_controller.rb
|
44
|
+
- lib/lab/controller/virtualbox_controller.rb
|
45
|
+
- lib/lab/controller/workstation_controller.rb
|
46
|
+
- lib/lab/controller/workstation_vixr_controller.rb
|
47
|
+
- lib/lab/controllers.rb
|
48
|
+
- lib/lab/driver/dynagen_driver.rb
|
49
|
+
- lib/lab/driver/fog_driver.rb
|
50
|
+
- lib/lab/driver/remote_esx_driver.rb
|
51
|
+
- lib/lab/driver/remote_workstation_driver.rb
|
52
|
+
- lib/lab/driver/virtualbox_driver.rb
|
53
|
+
- lib/lab/driver/vm_driver.rb
|
54
|
+
- lib/lab/driver/workstation_driver.rb
|
55
|
+
- lib/lab/driver/workstation_vixr_driver.rb
|
56
|
+
- lib/lab/drivers.rb
|
57
|
+
- lib/lab/modifier/backtrack5_modifier.rb
|
58
|
+
- lib/lab/modifier/dos_modifier.rb
|
59
|
+
- lib/lab/modifier/meterpreter_modifier.rb
|
60
|
+
- lib/lab/modifier/test_modifier.rb
|
61
|
+
- lib/lab/modifiers.rb
|
62
|
+
- lib/lab/version.rb
|
63
|
+
- lib/lab/vm.rb
|
64
|
+
- lib/lab/vm_controller.rb
|
65
|
+
- test/.gitkeep
|
66
|
+
homepage: http://www.pentestify.com/projects/lab
|
34
67
|
licenses: []
|
35
68
|
post_install_message:
|
36
69
|
rdoc_options: []
|