ssh_scan_api 0.0.1.pre2 → 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,67 +0,0 @@
1
- require 'mongo'
2
-
3
- Mongo::Logger.logger.level = ::Logger::FATAL
4
-
5
- module SSHScan
6
- module DB
7
- class MongoDb
8
- attr_reader :collection
9
-
10
- def initialize(client)
11
- @client = client
12
- @collection = @client[:ssh_scan]
13
- end
14
-
15
- # Helps us create a SSHScan::DB::MongoDB object with a hash
16
- def self.from_hash(opts)
17
- name = opts["name"]
18
- server = opts["server"]
19
- port = opts["port"]
20
- socket = server + ":" + port.to_s
21
-
22
- client = Mongo::Client.new([socket], :database => name)
23
- return SSHScan::DB::MongoDb.new(client)
24
- end
25
-
26
- # @param [String] worker_id
27
- # @param [String] uuid
28
- # @param [Hash] result
29
- def add_scan(worker_id, uuid, result, socket)
30
- @collection.insert_one("uuid" => uuid,
31
- "target" => socket[:target],
32
- "port" => socket[:port],
33
- "scan" => result,
34
- "worker_id" => worker_id)
35
- end
36
-
37
- def delete_scan(uuid)
38
- @collection.delete_one(:uuid => uuid)
39
- end
40
-
41
- def delete_all
42
- @collection.delete_many({})
43
- end
44
-
45
- # LEFT OFF HERE: the results of this method should be the exact same format as with SQLite
46
- def find_scan_result(uuid)
47
- @collection.find(:uuid => uuid).each do |doc|
48
- return doc[:scan].to_hash
49
- end
50
-
51
- return nil
52
- end
53
-
54
- def fetch_cached_result(socket)
55
- results = @collection.find(:target => socket[:target], :port => socket[:port])
56
- results = results.skip(results.count() - 1)
57
- return nil if results.count.zero?
58
- result = {}
59
- results.each do |result|
60
- result[:uuid] = result[:uuid]
61
- result[:start_time] = result[:scan][:start_time]
62
- return result
63
- end
64
- end
65
- end
66
- end
67
- end
@@ -1,91 +0,0 @@
1
- require 'sqlite3'
2
- require 'json'
3
-
4
- module SSHScan
5
- module DB
6
- class SQLite
7
- attr_reader :database
8
-
9
- def initialize(database)
10
- @database = database # the SQLite database object
11
- end
12
-
13
- # Helps us create a SSHScan::DB::SQLite object with a hash
14
- def self.from_hash(opts)
15
- file_name = opts["file"]
16
-
17
- if File.exist?(file_name)
18
- db = ::SQLite3::Database.open(file_name)
19
- else
20
- db = ::SQLite3::Database.new(file_name)
21
- end
22
-
23
- #Check to see if the schema is setup or not
24
- result = db.execute <<-SQL
25
- SELECT count(*) FROM sqlite_master WHERE type = 'table' AND name = 'ssh_scan';
26
- SQL
27
-
28
- # If not, create it
29
- if result == [[0]]
30
- # Create the schema for the database
31
- db.execute <<-SQL
32
- create table ssh_scan (
33
- uuid varchar(100),
34
- target varchar(100),
35
- port varchar(100),
36
- result json,
37
- worker_id varchar(100)
38
- );
39
- SQL
40
- end
41
-
42
- return SSHScan::DB::SQLite.new(db)
43
- end
44
-
45
- def size
46
- count = @database.execute("select count() from ssh_scan")
47
- return count
48
- end
49
-
50
- def add_scan(worker_id, uuid, result, socket)
51
- @database.execute "insert into ssh_scan values ( ? , ? , ? , ? , ? )",
52
- [uuid, socket[:target], socket[:port],
53
- result.to_json, worker_id]
54
- end
55
-
56
- def delete_scan(uuid)
57
- @database.execute(
58
- "delete from ssh_scan where uuid = ?",
59
- uuid
60
- )
61
- end
62
-
63
- def delete_all
64
- @database.execute("delete from ssh_scan")
65
- end
66
-
67
- def find_scan_result(uuid)
68
- @database.execute(
69
- "select * from ssh_scan where uuid like ( ? )",
70
- uuid
71
- ) do |row|
72
- return JSON.parse(row[3])
73
- end
74
- return nil
75
- end
76
-
77
- def fetch_cached_result(socket)
78
- result = {}
79
- results = @database.execute(
80
- "select uuid, result from ssh_scan
81
- where target like ( ? ) and port like ( ? )",
82
- [socket[:target], socket[:port]]
83
- )
84
- return nil if results == []
85
- result[:uuid] = results[result.length()-1][0]
86
- result[:start_time] = JSON.parse(results[result.length()-1][1])["start_time"]
87
- return result
88
- end
89
- end
90
- end
91
- end
@@ -1,24 +0,0 @@
1
- module SSHScan
2
- class JobQueue
3
- def initialize
4
- @queue = Queue.new
5
- end
6
-
7
- # @param [String] a socket we want to scan (Example: "192.168.1.1:22")
8
- # @return [nil]
9
- def add(socket)
10
- @queue.push(socket)
11
- end
12
-
13
- # @return [String] a socket we want to scan (Example: "192.168.1.1:22")
14
- def next
15
- return nil if @queue.empty?
16
- @queue.pop
17
- end
18
-
19
- # @return [FixNum] the number of jobs in the JobQueue
20
- def size
21
- @queue.size
22
- end
23
- end
24
- end
@@ -1,52 +0,0 @@
1
- module SSHScan
2
- class Stats
3
- def initialize
4
- @requests = []
5
- end
6
-
7
- def new_scan_request
8
- @requests << Time.now
9
- # Purges the request queue of old requests
10
- purge_old_requests
11
- end
12
-
13
- def get_stats(queue_size)
14
- {
15
- :items_queued => queue_size,
16
- :avg_requests_per_min => requests_avg_per,
17
- :requests_per_min => requests_per
18
- }.to_json
19
- end
20
-
21
- def size
22
- @requests.size
23
- end
24
-
25
- # Purges the request queue of old requests, so we don't run the API out of memory
26
- # @param [Fixnum] seconds
27
- def purge_old_requests(seconds = 60)
28
- @requests.delete_if {|request_time| request_time < Time.now - seconds}
29
- end
30
-
31
- # Determines the number of requests in a second-based
32
- # time period (up to 60 seconds)
33
- # @param [Fixnum] seconds
34
- # @return [Fixnum] request per time period
35
- def requests_per(seconds = 60)
36
- requests_per = 0
37
- past_time = Time.now - seconds
38
-
39
- @requests.each do |request_time|
40
- requests_per += 1 if request_time >= past_time
41
- end
42
-
43
- return requests_per
44
- end
45
-
46
- # Determines average requests per time period
47
- def requests_avg_per(seconds = 60)
48
- requests_per = requests_per(seconds)
49
- requests_per / seconds.to_f
50
- end
51
- end
52
- end