Skip to content

Commit c20a812

Browse files
committed
More work for nessus-xmlrpc.rb
1 parent e8ba0b7 commit c20a812

File tree

1 file changed

+136
-129
lines changed

1 file changed

+136
-129
lines changed

lib/nessus/nessus-xmlrpc.rb

Lines changed: 136 additions & 129 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ def initialize(host, username = nil, password = nil, ssl_option = nil)
1212
@connection = Net::HTTP.new(uri.host, uri.port)
1313
@connection.use_ssl = true
1414
if ssl_option == "ssl_verify"
15-
@connection.verify_mode = OpenSSL::SSL::VERIFY_PEER
15+
@connection.verify_mode = OpenSSL::SSL::VERIFY_PEER
1616
else
1717
@connection.verify_mode = OpenSSL::SSL::VERIFY_NONE
1818
end
@@ -27,13 +27,15 @@ def authenticate(username, password)
2727
:password => password,
2828
:json => 1,
2929
}
30-
request = Net::HTTP::Post.new("/session")
31-
request.set_form_data(payload)
32-
resp = @connection.request(request)
33-
resp = JSON.parse(resp.body)
30+
resp = http_post(:uri=>'/session', :data=>payload)
3431
@token = "token=#{resp['token']}"
3532
true
3633
end
34+
35+
def x_cookie
36+
{'X-Cookie'=>@token}
37+
end
38+
3739
alias_method :login, :authenticate
3840

3941
def authenticated
@@ -45,11 +47,7 @@ def authenticated
4547
end
4648

4749
def get_server_properties
48-
request = Net::HTTP::Get.new("/server/properties")
49-
request.add_field("X-Cookie",@token)
50-
resp = @connection.request(request)
51-
resp = JSON.parse(resp.body)
52-
return resp
50+
http_get(:uri=>'/server/properties', :fields=>x_cookie)
5351
end
5452

5553
def user_add(username, password, permissions, type)
@@ -60,114 +58,67 @@ def user_add(username, password, permissions, type)
6058
:type => type,
6159
:json => 1,
6260
}
63-
request = Net::HTTP::Post.new("/users")
64-
request.set_form_data(payload)
65-
request.add_field("X-Cookie", @token)
66-
resp = @connection.request(request)
67-
resp = JSON.parse(resp.body)
68-
return resp
61+
http_post(:uri=>'/users', :fields=>x_cookie, :data=>payload)
6962
end
7063

7164
def user_delete(user_id)
72-
request = Net::HTTP::Delete.new("/users/#{user_id}")
73-
request.add_field("X-Cookie", @token)
74-
resp = @connection.request(request)
75-
return resp.code
65+
res = http_delete(:uri=>"/users/#{user_id}", :fields=>x_cookie)
66+
return res.code
7667
end
7768

7869
def user_chpasswd(user_id, password)
7970
payload = {
8071
:password => password,
8172
:json => 1,
8273
}
83-
request = Net::HTTP::Put.new("/users/#{user_id}/chpasswd")
84-
request.set_form_data(payload)
85-
request.add_field("X-Cookie", @token)
86-
resp = @connection.request(request)
87-
return resp.code
74+
res = http_put(:uri=>"/users/#{user_id}/chpasswd", :data=>payload, :fields=>x_cookie)
75+
return res.code
8876
end
8977

9078
def user_logout
91-
request = Net::HTTP::Delete.new("/session")
92-
request.add_field("X-Cookie", @token)
93-
resp = @connection.request(request)
94-
return resp.code
79+
res = http_delete(:uri=>'/session', :fields=>x_cookie)
80+
return res.code
9581
end
9682

9783
def list_policies
98-
request = Net::HTTP::Get.new("/policies")
99-
request.add_field("X-Cookie", @token)
100-
resp = @connection.request(request)
101-
resp = JSON.parse(resp.body)
102-
return resp
84+
http_get(:uri=>'/policies', :fields=>x_cookie)
10385
end
10486

10587
def list_users
106-
request = Net::HTTP::Get.new("/users")
107-
request.add_field("X-Cookie", @token)
108-
resp = @connection.request(request)
109-
resp = JSON.parse(resp.body)
110-
return resp
88+
http_get(:uri=>'/users', :fields=>x_cookie)
11189
end
11290

11391
def list_folders
114-
request = Net::HTTP::Get.new("/folders")
115-
request.add_field("X-Cookie", @token)
116-
resp = @connection.request(request)
117-
resp = JSON.parse(resp.body)
118-
return resp
92+
http_get(:uri=>'/folders', :fields=>x_cookie)
11993
end
12094

12195
def list_scanners
122-
request = Net::HTTP::Get.new("/scanners")
123-
request.add_field("X-Cookie", @token)
124-
resp = @connection.request(request)
125-
resp = JSON.parse(resp.body)
126-
return resp
96+
http_get(:uri=>'/scanners', :fields=>x_cookie)
12797
end
12898

12999
def list_families
130-
request = Net::HTTP::Get.new("/plugins/families")
131-
request.add_field("X-Cookie", @token)
132-
resp = @connection.request(request)
133-
resp = JSON.parse(resp.body)
134-
return resp
100+
http_get(:uri=>'/plugins/families', :fields=>x_cookie)
135101
end
136102

137103
def list_plugins(family_id)
138-
request = Net::HTTP::Get.new("/plugins/families/#{family_id}")
139-
request.add_field("X-Cookie", @token)
140-
resp = @connection.request(request)
141-
resp = JSON.parse(resp.body)
142-
return resp
104+
http_get(:uri=>"/plugins/families/#{family_id}", :fields=>x_cookie)
143105
end
144106

145107
def plugin_details(plugin_id)
146-
request = Net::HTTP::Get.new("/plugins/plugin/#{plugin_id}")
147-
request.add_field("X-Cookie", @token)
148-
resp = @connection.request(request)
149-
resp = JSON.parse(resp.body)
150-
return resp
108+
http_get(:uri=>"/plugins/plugin/#{plugin_id}", :fields=>x_cookie)
151109
end
152110

153111
def is_admin
154-
request = Net::HTTP::Get.new("/session")
155-
request.add_field("X-Cookie", @token)
156-
resp = @connection.request(request)
157-
resp = JSON.parse(resp.body)
158-
if resp["permissions"] == 128
112+
res = http_get(:uri=>'/session', :fields=>x_cookie)
113+
if res['permissions'] == 128
159114
return true
160115
else
161116
return false
162117
end
163118
end
164119

165120
def server_properties
166-
request = Net::HTTP::Get.new("/server/properties")
167-
request.add_field("X-Cookie", @token)
168-
resp = @connection.request(request)
169-
resp = JSON.parse(resp.body)
170-
return resp
121+
http_get(:uri=>'/server/properties', :fields=>x_cookie)
171122
end
172123

173124
def scan_create(uuid, name, description, targets)
@@ -179,83 +130,43 @@ def scan_create(uuid, name, description, targets)
179130
:text_targets => targets
180131
},
181132
:json => 1
182-
}
183-
request = Net::HTTP::Post.new("/scans")
184-
request.body = payload.to_json
185-
request.add_field("X-Cookie", @token)
186-
request["Content-Type"] = "application/json"
187-
resp = @connection.request(request)
188-
resp = JSON.parse(resp.body)
189-
return resp
133+
}.to_json
134+
http_post(:uri=>'/scans', :body=>payload, :fields=>x_cookie, :ctype=>'application/json')
190135
end
191136

192137
def scan_launch(scan_id)
193-
request = Net::HTTP::Post.new("/scans/#{scan_id}/launch")
194-
request.add_field("X-Cookie", @token)
195-
resp = @connection.request(request)
196-
resp = JSON.parse(resp.body)
197-
return resp
138+
http_post(:uri=>"/scans/#{scan_id}/launch", :fields=>x_cookie)
198139
end
199140

200141
def server_status
201-
request = Net::HTTP::Get.new("/server/status")
202-
request.add_field("X-Cookie", @token)
203-
resp = @connection.request(request)
204-
resp = JSON.parse(resp.body)
205-
return resp
142+
http_get(:uri=>'/server/status', :fields=>x_cookie)
206143
end
207144

208145
def scan_list
209-
request = Net::HTTP::Get.new("/scans")
210-
request.add_field("X-Cookie", @token)
211-
resp = @connection.request(request)
212-
resp = JSON.parse(resp.body)
213-
return resp
146+
http_get(:uri=>'/scans', :fields=>x_cookie)
214147
end
215148

216149
def scan_details(scan_id)
217-
request = Net::HTTP::Get.new("/scans/#{scan_id}")
218-
request.add_field("X-Cookie", @token)
219-
resp = @connection.request(request)
220-
resp = JSON.parse(resp.body)
221-
return resp
150+
http_get(:uri=>"/scans/#{scan_id}", :fields=>x_cookie)
222151
end
223152

224153
def scan_pause(scan_id)
225-
request = Net::HTTP::Post.new("/scans/#{scan_id}/pause")
226-
request.add_field("X-Cookie", @token)
227-
resp = @connection.request(request)
228-
resp = JSON.parse(resp.body)
229-
return resp
154+
http_get(:uri=>"/scans/#{scan_id}/pause", :fields=>x_cookie)
230155
end
231156

232157
def scan_resume(scan_id)
233-
request = Net::HTTP::Post.new("/scans/#{scan_id}/resume")
234-
request.add_field("X-Cookie", @token)
235-
resp = @connection.request(request)
236-
resp = JSON.parse(resp.body)
237-
return resp
158+
http_post(:uri=>"/scans/#{scan_id}/resume", :fields=>x_cookie)
238159
end
239160

240161
def scan_stop(scan_id)
241-
request = Net::HTTP::Post.new("/scans/#{scan_id}/stop")
242-
request.add_field("X-Cookie", @token)
243-
resp = @connection.request(request)
244-
resp = JSON.parse(resp.body)
245-
return resp
162+
http_post(:uri=>"/scans/#{scan_id}/stop", :fields=>x_cookie)
246163
end
247164

248165
def scan_export(scan_id, format)
249166
payload = {
250167
:format => format
251-
}
252-
request = Net::HTTP::Post.new("/scans/#{scan_id}/export")
253-
request.body = payload.to_json
254-
request["Content-Type"] = "application/json"
255-
request.add_field("X-Cookie", @token)
256-
resp = @connection.request(request)
257-
resp = JSON.parse(resp.body)
258-
return resp
168+
}.to_json
169+
http_post(:uri=>"/scans/#{scan_id}/export", :body=>payload, :ctype=>'application/json', :fields=>x_cookie)
259170
end
260171

261172
def scan_export_status(scan_id, file_id)
@@ -271,10 +182,8 @@ def scan_export_status(scan_id, file_id)
271182
end
272183

273184
def policy_delete(policy_id)
274-
request = Net::HTTP::Delete.new("/policies/#{policy_id}")
275-
request.add_field("X-Cookie",@token)
276-
resp = @connection.request(request)
277-
return resp.code
185+
res = http_delete(:uri=>"/policies/#{policy_id}", :fields=>x_cookie)
186+
return res.code
278187
end
279188

280189
def report_list_hash
@@ -309,5 +218,103 @@ def report_host_port_details
309218
raise NotImplementedError
310219
end
311220

221+
private
222+
223+
def http_put(opts={})
224+
uri = opts[:uri]
225+
data = opts[:data]
226+
fields = opts[:fields] || {}
227+
res = nil
228+
229+
req = Net::HTTP::Put.new(uri)
230+
req.set_form_data(data) unless data.blank?
231+
fields.each_pair do |name, value|
232+
req.add_field(name, value)
233+
end
234+
235+
begin
236+
res = @connection.request(req)
237+
rescue URI::InvalidURIError
238+
return res
239+
end
240+
241+
res
242+
end
243+
244+
def http_delete(opts={})
245+
uri = opts[:uri]
246+
fields = opts[:fields] || {}
247+
res = nil
248+
249+
req = Net::HTTP::Delete.new(uri)
250+
251+
fields.each_pair do |name, value|
252+
req.add_field(name, value)
253+
end
254+
255+
begin
256+
res = @connection.request(req)
257+
rescue URI::InvalidURIError
258+
return res
259+
end
260+
261+
res
262+
end
263+
264+
def http_get(opts={})
265+
uri = opts[:uri]
266+
fields = opts[:fields] || {}
267+
json = {}
268+
269+
req = Net::HTTP::Get.new(uri)
270+
fields.each_pair do |name, value|
271+
req.add_field(name, value)
272+
end
273+
274+
begin
275+
res = @connection.request(req)
276+
rescue URI::InvalidURIError
277+
return json
278+
end
279+
280+
parse_json(res.body)
281+
end
282+
283+
def http_post(opts={})
284+
uri = opts[:uri]
285+
data = opts[:data]
286+
fields = opts[:fields] || {}
287+
body = opts[:body]
288+
ctype = opts[:ctype]
289+
json = {}
290+
291+
req = Net::HTTP::Post.new(uri)
292+
req.set_form_data(data) unless data.blank?
293+
req.body = body unless body.blank?
294+
req['Content-Type'] = ctype unless ctype.blank?
295+
fields.each_pair do |name, value|
296+
req.add_field(name, value)
297+
end
298+
299+
begin
300+
res = @connection.request(req)
301+
rescue URI::InvalidURIError
302+
return json
303+
end
304+
305+
parse_json(res.body)
306+
end
307+
308+
def parse_json(body)
309+
buf = {}
310+
311+
begin
312+
buf = JSON.parse(body)
313+
rescue JSON::ParserError
314+
end
315+
316+
buf
317+
end
318+
312319
end
313320
end

0 commit comments

Comments
 (0)