thm 0.1.8
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/README.1ST +38 -0
- data/README.md +59 -0
- data/bin/thm-consumer +89 -0
- data/bin/thm-pcap +67 -0
- data/bin/thm-producer +102 -0
- data/bin/thm-session +319 -0
- data/bin/thm-useradmin +75 -0
- data/config.rb +30 -0
- data/datalayerlight.rb +143 -0
- data/js/JSXTransformer.js +15919 -0
- data/js/chartkick.js +829 -0
- data/js/files/authenticate.jsx +30 -0
- data/js/jquery.min.js +5 -0
- data/js/marked.min.js +6 -0
- data/js/react.js +19602 -0
- data/lib/thm.rb +49 -0
- data/lib/thm/consumer.rb +228 -0
- data/lib/thm/dataservices.rb +73 -0
- data/lib/thm/localmachine.rb +170 -0
- data/lib/thm/producer.rb +198 -0
- data/lib/thm/version.rb +14 -0
- data/service_definitions.csv +6366 -0
- data/sql/geoipdata-monetdb.sql +111 -0
- data/sql/threatmonitor-monetdb.sql +174 -0
- data/sql/threatmonitor-mysql.sql +156 -0
- data/stylesheets/screen.css +150 -0
- data/thm-authentication.rb +65 -0
- data/thm-authorization.rb +173 -0
- data/thm-privileges.rb +97 -0
- data/views/authenticate.slim +18 -0
- data/views/dashboard.erb +69 -0
- data/views/logout.slim +10 -0
- metadata +237 -0
@@ -0,0 +1,65 @@
|
|
1
|
+
########################################################################
|
2
|
+
#
|
3
|
+
# Author: Brian Hood
|
4
|
+
#
|
5
|
+
# Description: Threatmonitor User Administration
|
6
|
+
#
|
7
|
+
# Extends the functionality of the Thm module adding Authorization
|
8
|
+
# Adding Authentication to the Privileges model
|
9
|
+
#
|
10
|
+
########################################################################
|
11
|
+
|
12
|
+
require "#{File.dirname(__FILE__)}/lib/thm.rb"
|
13
|
+
require "#{File.dirname(__FILE__)}/config.rb"
|
14
|
+
require "#{File.dirname(__FILE__)}/thm-privileges.rb"
|
15
|
+
|
16
|
+
#require File.expand_path(File.join(
|
17
|
+
# File.dirname(__FILE__),
|
18
|
+
# "/lib/thm.rb")
|
19
|
+
|
20
|
+
module Thm::Authorization
|
21
|
+
|
22
|
+
class Authentication < Thm::DataServices
|
23
|
+
|
24
|
+
attr_reader :thmsession
|
25
|
+
attr_accessor :thmsesslock
|
26
|
+
|
27
|
+
def initialize
|
28
|
+
super
|
29
|
+
@debug = 1
|
30
|
+
end
|
31
|
+
|
32
|
+
def login(username, password)
|
33
|
+
obj = Thm::Authorization::Privileges.new
|
34
|
+
pwhash = obj.mkhash(password)
|
35
|
+
sqlusrcnt = "SELECT count(*) as num FROM users WHERE username = '#{username}' AND password = '#{pwhash}'"
|
36
|
+
resusrcnt = @conn.query("#{sqlusrcnt}")
|
37
|
+
rowusrcnt = resusrcnt.fetch_hash
|
38
|
+
puts "#{rowusrcnt["num"].to_i}"
|
39
|
+
if rowusrcnt["num"].to_i == 1
|
40
|
+
puts "Authentication Success"
|
41
|
+
@thmsession = Tools::guid.to_s
|
42
|
+
@thmsesslock = "OK"
|
43
|
+
else
|
44
|
+
@thmsession = "failure"
|
45
|
+
@thmsesslock = "FAILURE"
|
46
|
+
puts "\e[1;31m\Failure to Authenticate \e[0m\ "
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
def login_session?
|
51
|
+
if @thmsession != "failure" or @thmsession != nil
|
52
|
+
return true
|
53
|
+
else
|
54
|
+
return false
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
def logout
|
59
|
+
@thmsession = nil
|
60
|
+
@thmsesslock = "DEADBEEF"
|
61
|
+
end
|
62
|
+
|
63
|
+
end
|
64
|
+
|
65
|
+
end
|
@@ -0,0 +1,173 @@
|
|
1
|
+
########################################################################
|
2
|
+
#
|
3
|
+
# Author: Brian Hood
|
4
|
+
#
|
5
|
+
# Description: Threatmonitor Authorization
|
6
|
+
#
|
7
|
+
# Extends the functionality of the Thm module adding Authorization
|
8
|
+
#
|
9
|
+
########################################################################
|
10
|
+
|
11
|
+
require 'digest'
|
12
|
+
require "#{File.dirname(__FILE__)}/lib/thm.rb"
|
13
|
+
require 'pp'
|
14
|
+
|
15
|
+
puts "\e[1;33m\Threatmonitor - User Administration\e[0m\ "
|
16
|
+
puts "\e[1;33m\===================================\e[0m\ \n\n"
|
17
|
+
|
18
|
+
module Thm::Authorization
|
19
|
+
|
20
|
+
class AuthTemplate < Thm::DataServices
|
21
|
+
|
22
|
+
def initialize
|
23
|
+
super
|
24
|
+
@debug = 1
|
25
|
+
end
|
26
|
+
|
27
|
+
def setup_privileges(name, obj)
|
28
|
+
data = obj.new
|
29
|
+
actiontemplate = { 'userdata' => {
|
30
|
+
'type' => "#{data.type}",
|
31
|
+
'group' => "#{data.group}",
|
32
|
+
'password' => "#{data.password}"
|
33
|
+
}
|
34
|
+
}
|
35
|
+
#pp actiontemplate
|
36
|
+
if @debug == 1
|
37
|
+
puts "Action template User data"
|
38
|
+
puts "User: #{name}"
|
39
|
+
puts "Type: #{actiontemplate["userdata"]["type"]}"
|
40
|
+
puts "Group: #{actiontemplate["userdata"]["group"]}"
|
41
|
+
puts "Password: #{actiontemplate["userdata"]["password"]}"
|
42
|
+
end
|
43
|
+
case actiontemplate["userdata"]["type"]
|
44
|
+
when "adduser"
|
45
|
+
sqlid = "SELECT gid FROM groups WHERE groupname = '#{actiontemplate["userdata"]["group"]}';"
|
46
|
+
resgid = @conn.query("#{sqlid}")
|
47
|
+
rowgid = resgid.fetch_hash
|
48
|
+
puts "#{rowgid["gid"].to_i}"
|
49
|
+
if rowgid["gid"] =~ /^[0-9]*$/ # Check the value is numeric
|
50
|
+
sqlidcnt = "SELECT count(*) as num FROM groups WHERE groupname = '#{actiontemplate["userdata"]["group"]}';"
|
51
|
+
resgidcnt = @conn.query("#{sqlidcnt}")
|
52
|
+
rowgidcnt = resgidcnt.fetch_hash
|
53
|
+
puts "#{rowgidcnt["num"].to_i}"
|
54
|
+
if rowgidcnt["num"].to_i == 1
|
55
|
+
sql = "INSERT INTO users (username, password, gid) VALUES ('#{name}', '#{actiontemplate["userdata"]["password"]}', #{rowgid["gid"]});"
|
56
|
+
begin
|
57
|
+
@conn.query("#{sql}")
|
58
|
+
@conn.commit
|
59
|
+
rescue
|
60
|
+
puts "There was a issue adding user check database privileges"
|
61
|
+
end
|
62
|
+
else
|
63
|
+
puts "Group #{actiontemplate["userdata"]["group"]} doesn't exist"
|
64
|
+
end
|
65
|
+
else
|
66
|
+
puts "Group #{actiontemplate["userdata"]["group"]} invalid GID ?"
|
67
|
+
end
|
68
|
+
when "userexists?"
|
69
|
+
sqlchkname = "SELECT COUNT(*) as num FROM users WHERE username = '#{name}';"
|
70
|
+
reschkname = @conn.query("#{sqlchkname}")
|
71
|
+
rowchknamecnt = reschkname.fetch_hash
|
72
|
+
puts "#{rowchknamecnt["num"].to_i}"
|
73
|
+
if rowchknamecnt["num"].to_i == 0
|
74
|
+
puts "User #{name} doesn't exist"
|
75
|
+
return false
|
76
|
+
else
|
77
|
+
return true
|
78
|
+
end
|
79
|
+
when "deleteuser"
|
80
|
+
if self.user_exists?("#{name}") == true
|
81
|
+
sqldeluser = "DELETE FROM users WHERE username = '#{name}';"
|
82
|
+
begin
|
83
|
+
@conn.query("#{sqldeluser}")
|
84
|
+
@conn.commit
|
85
|
+
puts "User #{name} deleted"
|
86
|
+
rescue
|
87
|
+
puts "Error deleting User #{name}"
|
88
|
+
end
|
89
|
+
end
|
90
|
+
when "listusers"
|
91
|
+
sqllsusers = "SELECT uid, username FROM users;"
|
92
|
+
reslsusers = @conn.query("#{sqllsusers}")
|
93
|
+
puts "\n"
|
94
|
+
puts "\e[1;38m| Users Table |\e[0m\ \n"
|
95
|
+
puts "\e[1;38m\\==========================/\e[0m\ "
|
96
|
+
while row = reslsusers.fetch_hash do
|
97
|
+
puts "UID: #{row["uid"]} Username: #{row["username"]}"
|
98
|
+
end
|
99
|
+
puts "\n"
|
100
|
+
when "listgroups"
|
101
|
+
sqllsusers = "SELECT gid, groupname FROM groups;"
|
102
|
+
reslsusers = @conn.query("#{sqllsusers}")
|
103
|
+
puts "\n"
|
104
|
+
puts "\e[1;38m| Groups Table |\e[0m\ \n"
|
105
|
+
puts "\e[1;38m\\==========================/\e[0m\ "
|
106
|
+
while row = reslsusers.fetch_hash do
|
107
|
+
puts "GID: #{row["gid"]} Groupname: #{row["groupname"]}"
|
108
|
+
end
|
109
|
+
puts "\n"
|
110
|
+
when "groupexists?"
|
111
|
+
sqlchkname = "SELECT COUNT(*) as num FROM groups WHERE groupname = '#{name}';"
|
112
|
+
reschkname = @conn.query("#{sqlchkname}")
|
113
|
+
rowchknamecnt = reschkname.fetch_hash
|
114
|
+
puts "#{rowchknamecnt["num"].to_i}"
|
115
|
+
if rowchknamecnt["num"].to_i == 0
|
116
|
+
if actiontemplate["userdata"]["msg"] == true
|
117
|
+
puts "Group #{name} doesn't exist"
|
118
|
+
end
|
119
|
+
return false
|
120
|
+
else
|
121
|
+
return true
|
122
|
+
end
|
123
|
+
when "deletegroup"
|
124
|
+
puts "#{name}"
|
125
|
+
if self.group_exists?("#{name}") == true
|
126
|
+
sqldelgroup = "DELETE FROM groups WHERE groupname = '#{name}';"
|
127
|
+
begin
|
128
|
+
@conn.query("#{sqldelgroup}")
|
129
|
+
@conn.commit
|
130
|
+
puts "Group #{name} deleted"
|
131
|
+
rescue
|
132
|
+
puts "Error deleting Group #{name}"
|
133
|
+
end
|
134
|
+
end
|
135
|
+
when "addgroup"
|
136
|
+
sqlidcnt = "SELECT count(*) as num FROM groups WHERE groupname = '#{name}';"
|
137
|
+
resgidcnt = @conn.query("#{sqlidcnt}")
|
138
|
+
rowgidcnt = resgidcnt.fetch_hash
|
139
|
+
puts "#{rowgidcnt["num"].to_i}"
|
140
|
+
if rowgidcnt["num"].to_i == 0
|
141
|
+
sqladdgroup = "INSERT INTO groups (groupname) VALUES ('#{name}');"
|
142
|
+
begin
|
143
|
+
@conn.query("#{sqladdgroup}")
|
144
|
+
@conn.commit
|
145
|
+
rescue
|
146
|
+
puts "There was a issue adding group check database privileges"
|
147
|
+
end
|
148
|
+
else
|
149
|
+
puts "Group #{actiontemplate["userdata"]["group"]} doesn't exist"
|
150
|
+
end
|
151
|
+
end
|
152
|
+
end
|
153
|
+
|
154
|
+
# Build a class object using a Flat scope so we can pass through variables
|
155
|
+
# Then pass it as an object to setup_privileges
|
156
|
+
def objbuilder(user, type="", group="", password="")
|
157
|
+
# user becomes group when adding / deleting groups
|
158
|
+
# objbuilder("#{@thmgroupname}", "addgroup")
|
159
|
+
designobj = Class.new do
|
160
|
+
attr_reader :type, :group, :password
|
161
|
+
define_method :initialize do
|
162
|
+
instance_variable_set("@type", "#{type}")
|
163
|
+
instance_variable_set("@group", "#{group}")
|
164
|
+
instance_variable_set("@password", "#{password}")
|
165
|
+
end
|
166
|
+
end
|
167
|
+
setup_privileges("#{user}", designobj)
|
168
|
+
end
|
169
|
+
|
170
|
+
end
|
171
|
+
|
172
|
+
end
|
173
|
+
|
data/thm-privileges.rb
ADDED
@@ -0,0 +1,97 @@
|
|
1
|
+
########################################################################
|
2
|
+
#
|
3
|
+
# Author: Brian Hood
|
4
|
+
#
|
5
|
+
# Description: Threatmonitor User Administration
|
6
|
+
#
|
7
|
+
# Extends the functionality of the Thm module adding Authorization
|
8
|
+
# Adding User / Group Privileges functionality
|
9
|
+
#
|
10
|
+
########################################################################
|
11
|
+
|
12
|
+
require "#{File.dirname(__FILE__)}/thm-authorization.rb"
|
13
|
+
|
14
|
+
module Thm::Authorization
|
15
|
+
|
16
|
+
class Privileges < AuthTemplate
|
17
|
+
|
18
|
+
puts "\e[1;34m\ Manage User / Group Privileges \e[0m\ \n\n"
|
19
|
+
|
20
|
+
def mkhash(payload)
|
21
|
+
hash = Digest::SHA512.new
|
22
|
+
puts "Password Omitted !"
|
23
|
+
hash.update("#{payload}")
|
24
|
+
end
|
25
|
+
|
26
|
+
def user_exists?(name)
|
27
|
+
objbuilder("#{name}", "userexists?", msg=false)
|
28
|
+
end
|
29
|
+
|
30
|
+
def add_user
|
31
|
+
while buf = Readline.readline("\e[1;36m\Add User: \e[0m\ ", true)
|
32
|
+
@thmusername = buf
|
33
|
+
while buf2 = Readline.readline("\e[1;36m\Existing Group: \e[0m\ ", true)
|
34
|
+
@thmgroupname = buf2
|
35
|
+
break
|
36
|
+
end
|
37
|
+
if self.user_exists?("#{@thmusername}"); puts "Exiting ... Can't create duplicate users ?"; exit; end
|
38
|
+
break
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
#def update_user; end
|
43
|
+
|
44
|
+
#alias_method :modify_user, :update_user
|
45
|
+
|
46
|
+
def delete_user
|
47
|
+
while buf = Readline.readline("\e[1;36m\Remove User: \e[0m\ ", true)
|
48
|
+
@thmusername = buf
|
49
|
+
objbuilder("#{@thmusername}", "deleteuser")
|
50
|
+
break
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
def set_password(prompt="\e[1;36m\Password: \e[0m\ ")
|
55
|
+
print prompt
|
56
|
+
plain = STDIN.noecho(&:gets).chomp
|
57
|
+
@thmpassword = mkhash(plain)
|
58
|
+
objbuilder("#{@thmusername}", "adduser", "#{@thmgroupname}", "#{@thmpassword}")
|
59
|
+
end
|
60
|
+
|
61
|
+
def list_users
|
62
|
+
objbuilder("system", "listusers")
|
63
|
+
end
|
64
|
+
|
65
|
+
def list_groups
|
66
|
+
objbuilder("system", "listgroups")
|
67
|
+
end
|
68
|
+
|
69
|
+
def group_exists?(name)
|
70
|
+
objbuilder("#{name}", "groupexists?")
|
71
|
+
end
|
72
|
+
|
73
|
+
def add_group
|
74
|
+
while buf = Readline.readline("\e[1;36m\Add Group: \e[0m\ ", true)
|
75
|
+
@thmgroupname = buf
|
76
|
+
if self.group_exists?("#{@thmgroupname}") == true
|
77
|
+
puts "Exiting Group exists ..."
|
78
|
+
end
|
79
|
+
if self.group_exists?("#{@thmgroupname}"); puts "Exiting ... Can't create duplicate groups ?"; exit; end
|
80
|
+
objbuilder("#{@thmgroupname}", "addgroup")
|
81
|
+
break
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
def delete_group
|
86
|
+
while buf = Readline.readline("\e[1;36m\Delete Group: \e[0m\ ", true)
|
87
|
+
@thmgroupname = buf
|
88
|
+
objbuilder("#{@thmgroupname}", "deletegroup")
|
89
|
+
break
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
end
|
94
|
+
|
95
|
+
end
|
96
|
+
|
97
|
+
|
@@ -0,0 +1,18 @@
|
|
1
|
+
doctype 5
|
2
|
+
html
|
3
|
+
head
|
4
|
+
title Threatmonitor Suite - Login
|
5
|
+
link rel="stylesheet" href="stylesheets/screen.css" type="text/css" media="screen"
|
6
|
+
script src="js/react.js"
|
7
|
+
script src="js/JSXTransformer.js"
|
8
|
+
script src="js/jquery.min.js"
|
9
|
+
script src="js/marked.min.js"
|
10
|
+
|
11
|
+
body
|
12
|
+
h2 Threatmonitor Suite Login
|
13
|
+
#content
|
14
|
+
|
15
|
+
div id="content"
|
16
|
+
script type="text/jsx" src="js/files/authenticate.jsx"
|
17
|
+
|
18
|
+
|
data/views/dashboard.erb
ADDED
@@ -0,0 +1,69 @@
|
|
1
|
+
<html>
|
2
|
+
<head>
|
3
|
+
<title>Threatmonitor Suite - Dashboard</title>
|
4
|
+
<link rel="stylesheet" href="stylesheets/screen.css" type="text/css" media="screen">
|
5
|
+
<script src="js/react.js"></script>
|
6
|
+
<script src="js/JSXTransformer.js"></script>
|
7
|
+
<script src="js/jquery.min.js"></script>
|
8
|
+
<script src="js/marked.min.js"></script>
|
9
|
+
<script src="js/jsapi.js"></script>
|
10
|
+
<script src="js/chartkick.js"></script>
|
11
|
+
</head>
|
12
|
+
<body>
|
13
|
+
<h3>Threatmonitor - Overview</h3>
|
14
|
+
<div id="content" style='width:100%; overflow:off;'>
|
15
|
+
<p align="left">Protocol data</p>
|
16
|
+
<table width="100%">
|
17
|
+
|
18
|
+
<tr><td colspan="2">Geo Location</td></tr>
|
19
|
+
<tr>
|
20
|
+
<td colspan="2" width="100%">
|
21
|
+
<div align="left" id="contentgeo" style='width:100%; height:100%; transform:scale(0.9);'>
|
22
|
+
<%= geo_chart @rowgeocount, id: "contentgeo", height: "400px", width: "400px" %>
|
23
|
+
</div></td>
|
24
|
+
</td>
|
25
|
+
</tr>
|
26
|
+
|
27
|
+
<tr><td>UDP Packets</td><td>TCP Packets</td></tr>
|
28
|
+
<tr>
|
29
|
+
<td width="50%">
|
30
|
+
<div align="left" id="content1" style='width:100%; height:100%; transform:scale(0.9);'>
|
31
|
+
<%= pie_chart @rowusrcnt, id: "content1", height: "400px", width: "400px" %>
|
32
|
+
</div></td>
|
33
|
+
<td width="50%">
|
34
|
+
<div align="left" id="content2" style='width:100%; height:100%; transform:scale(0.9);'>
|
35
|
+
<%= pie_chart @rowusrcnt2, id: "content2", height: "400px", width: "400px" %>
|
36
|
+
</div>
|
37
|
+
</td>
|
38
|
+
</tr>
|
39
|
+
|
40
|
+
<tr><td>Top TCP/IP Talkers</td><td>Top UDP/IP Talkers</td></tr>
|
41
|
+
<tr>
|
42
|
+
<td width="50%" height="50%">
|
43
|
+
<div align="left" id="content5" style='width:100%; height:100%; transform:scale(0.9);'>
|
44
|
+
<%= column_chart @rowusrcnt5, id: "content5", colors: ["orange", "#ed7718"] %>
|
45
|
+
</div></td>
|
46
|
+
<td width="50%" height="50%">
|
47
|
+
<div align="left" id="content6" style='width:100%; height:100%; transform:scale(0.9);'>
|
48
|
+
<%= column_chart @rowusrcnt6, id: "content6", colors: ["purple", "#78099d"] %>
|
49
|
+
</div></td>
|
50
|
+
</tr>
|
51
|
+
|
52
|
+
<tr><td>UDP Services</td><td>TCP Services</td></tr>
|
53
|
+
<tr>
|
54
|
+
<td width="50%" height="50%">
|
55
|
+
<div align="left" id="content3" style='width:100%; height:100%; transform:scale(0.9);'>
|
56
|
+
<%= bar_chart @rowusrcnt3, id: "content3", colors: ["green", "#177925"] %>
|
57
|
+
</div></td>
|
58
|
+
<td width="50%" height="50%">
|
59
|
+
<div align="left" id="content4" style='width:100%; height:100%; transform:scale(0.9);'>
|
60
|
+
<%= bar_chart @rowusrcnt4, id: "content4", colors: ["red", "#b80000"] %>
|
61
|
+
</div></td>
|
62
|
+
</tr>
|
63
|
+
</table>
|
64
|
+
</div>
|
65
|
+
<script type="text/jsx">
|
66
|
+
|
67
|
+
</script>
|
68
|
+
</body>
|
69
|
+
</html>
|
data/views/logout.slim
ADDED
metadata
ADDED
@@ -0,0 +1,237 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: thm
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.8
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- puppetpies
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2015-07-08 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: bundler
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '1.3'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '1.3'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rake
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '10.4'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '10.4'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rake-compiler
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0.9'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0.9'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: bunny
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '1.7'
|
62
|
+
type: :runtime
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '1.7'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: amqp
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '1.5'
|
76
|
+
type: :runtime
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '1.5'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: pcap
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - "~>"
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0.7'
|
90
|
+
type: :runtime
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - "~>"
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0.7'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: guid
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - "~>"
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0.1'
|
104
|
+
type: :runtime
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - "~>"
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0.1'
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: eventmachine
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - "~>"
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '1.0'
|
118
|
+
type: :runtime
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - "~>"
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '1.0'
|
125
|
+
- !ruby/object:Gem::Dependency
|
126
|
+
name: chartkick
|
127
|
+
requirement: !ruby/object:Gem::Requirement
|
128
|
+
requirements:
|
129
|
+
- - "~>"
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: '1.3'
|
132
|
+
type: :runtime
|
133
|
+
prerelease: false
|
134
|
+
version_requirements: !ruby/object:Gem::Requirement
|
135
|
+
requirements:
|
136
|
+
- - "~>"
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
version: '1.3'
|
139
|
+
- !ruby/object:Gem::Dependency
|
140
|
+
name: sinatra
|
141
|
+
requirement: !ruby/object:Gem::Requirement
|
142
|
+
requirements:
|
143
|
+
- - "~>"
|
144
|
+
- !ruby/object:Gem::Version
|
145
|
+
version: '1.4'
|
146
|
+
type: :runtime
|
147
|
+
prerelease: false
|
148
|
+
version_requirements: !ruby/object:Gem::Requirement
|
149
|
+
requirements:
|
150
|
+
- - "~>"
|
151
|
+
- !ruby/object:Gem::Version
|
152
|
+
version: '1.4'
|
153
|
+
- !ruby/object:Gem::Dependency
|
154
|
+
name: slim
|
155
|
+
requirement: !ruby/object:Gem::Requirement
|
156
|
+
requirements:
|
157
|
+
- - "~>"
|
158
|
+
- !ruby/object:Gem::Version
|
159
|
+
version: '3.0'
|
160
|
+
type: :runtime
|
161
|
+
prerelease: false
|
162
|
+
version_requirements: !ruby/object:Gem::Requirement
|
163
|
+
requirements:
|
164
|
+
- - "~>"
|
165
|
+
- !ruby/object:Gem::Version
|
166
|
+
version: '3.0'
|
167
|
+
description: Threatmonitor - Packet Capture / Analysis Suite
|
168
|
+
email: brianh6854@googlemail.com
|
169
|
+
executables:
|
170
|
+
- thm-consumer
|
171
|
+
- thm-pcap
|
172
|
+
- thm-producer
|
173
|
+
- thm-session
|
174
|
+
- thm-useradmin
|
175
|
+
extensions: []
|
176
|
+
extra_rdoc_files:
|
177
|
+
- README.md
|
178
|
+
- README.1ST
|
179
|
+
files:
|
180
|
+
- README.1ST
|
181
|
+
- README.md
|
182
|
+
- bin/thm-consumer
|
183
|
+
- bin/thm-pcap
|
184
|
+
- bin/thm-producer
|
185
|
+
- bin/thm-session
|
186
|
+
- bin/thm-useradmin
|
187
|
+
- config.rb
|
188
|
+
- datalayerlight.rb
|
189
|
+
- js/JSXTransformer.js
|
190
|
+
- js/chartkick.js
|
191
|
+
- js/files/authenticate.jsx
|
192
|
+
- js/jquery.min.js
|
193
|
+
- js/marked.min.js
|
194
|
+
- js/react.js
|
195
|
+
- lib/thm.rb
|
196
|
+
- lib/thm/consumer.rb
|
197
|
+
- lib/thm/dataservices.rb
|
198
|
+
- lib/thm/localmachine.rb
|
199
|
+
- lib/thm/producer.rb
|
200
|
+
- lib/thm/version.rb
|
201
|
+
- service_definitions.csv
|
202
|
+
- sql/geoipdata-monetdb.sql
|
203
|
+
- sql/threatmonitor-monetdb.sql
|
204
|
+
- sql/threatmonitor-mysql.sql
|
205
|
+
- stylesheets/screen.css
|
206
|
+
- thm-authentication.rb
|
207
|
+
- thm-authorization.rb
|
208
|
+
- thm-privileges.rb
|
209
|
+
- views/authenticate.slim
|
210
|
+
- views/dashboard.erb
|
211
|
+
- views/logout.slim
|
212
|
+
homepage: https://github.com/puppetpies/threatmonitor
|
213
|
+
licenses:
|
214
|
+
- MIT
|
215
|
+
metadata: {}
|
216
|
+
post_install_message:
|
217
|
+
rdoc_options: []
|
218
|
+
require_paths:
|
219
|
+
- lib
|
220
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
221
|
+
requirements:
|
222
|
+
- - ">="
|
223
|
+
- !ruby/object:Gem::Version
|
224
|
+
version: '0'
|
225
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
226
|
+
requirements:
|
227
|
+
- - ">="
|
228
|
+
- !ruby/object:Gem::Version
|
229
|
+
version: '0'
|
230
|
+
requirements:
|
231
|
+
- libpcap
|
232
|
+
rubyforge_project:
|
233
|
+
rubygems_version: 2.2.2
|
234
|
+
signing_key:
|
235
|
+
specification_version: 4
|
236
|
+
summary: Packet Data Analysis
|
237
|
+
test_files: []
|