thm 0.1.8
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.
- 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: []
|