spior 0.0.4 → 0.0.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data/CHANGELOG.md +8 -0
- data/lib/spior/copy.rb +0 -2
- data/lib/spior/iptables.rb +194 -0
- data/lib/spior/mac.rb +4 -33
- data/lib/spior/network.rb +46 -0
- data/lib/spior/options.rb +8 -3
- data/lib/spior/runner.rb +14 -1
- data/spior.gemspec +2 -3
- data.tar.gz.sig +0 -0
- metadata +5 -5
- metadata.gz.sig +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: fd5390387f810136edd22aaa9cad905c3a04883faf366278cb9384e5f54605f9
|
4
|
+
data.tar.gz: 6c8be038056d9407403bc72dc919a1f63dcfe2edd8c9dc940352dd05dac4f0f8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5cac5ac6b18fded218c40beec95e53cbb85f7e85f6c58bf681085dc28370661da6997518c575d0365852a56c8ba102037414e6b10dc69ef522346bc8b7a24eb8
|
7
|
+
data.tar.gz: 8d96a2e4e9f7646011bbab44615e723bb0032de3bc47c8f97e11fb36df8741f30dc6f2b2aeef75ba50a6ec4b1f3fc59007ca61dd7922bd7f4f648d5d13db7f51
|
checksums.yaml.gz.sig
CHANGED
Binary file
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,11 @@
|
|
1
|
+
## 0.0.5, release 2020-05-03
|
2
|
+
* Spior can now redirect all the traffic through TOR
|
3
|
+
* Add OptionParser -t|--tor
|
4
|
+
* Change class lib/spior/mac by module
|
5
|
+
* Correct option -c|--card NAME
|
6
|
+
* Create lib/spior/network
|
7
|
+
* Create lib/spior/iptables
|
8
|
+
|
1
9
|
## 0.0.4, release 2020-05-02
|
2
10
|
* Spior can now randomize a mac address with decertmac
|
3
11
|
* Add field s.metadata to spior.gemspec
|
data/lib/spior/copy.rb
CHANGED
@@ -0,0 +1,194 @@
|
|
1
|
+
require 'interfacez'
|
2
|
+
require_relative 'msg'
|
3
|
+
|
4
|
+
module Spior
|
5
|
+
class Iptables
|
6
|
+
|
7
|
+
def self.tor(interface = false)
|
8
|
+
initialize(interface)
|
9
|
+
select_cmd
|
10
|
+
flush_rules
|
11
|
+
bogus_tcp_flags
|
12
|
+
bad_packets
|
13
|
+
spoofing
|
14
|
+
icmp
|
15
|
+
dns
|
16
|
+
nat
|
17
|
+
input
|
18
|
+
output
|
19
|
+
forward
|
20
|
+
end
|
21
|
+
|
22
|
+
private
|
23
|
+
|
24
|
+
def self.initialize(interface)
|
25
|
+
@lo = Interfacez.loopback
|
26
|
+
@lo_addr = Interfacez.ipv4_address_of(@lo)
|
27
|
+
@tor_dns = 9061
|
28
|
+
@trans_port = 9040
|
29
|
+
@tor_uid = `id -u tor 2>&1 | grep "^[0-9]*"`.chomp
|
30
|
+
@virt_addr= "10.192.0.0/10"
|
31
|
+
@non_tor = ["#{@lo_addr}/8", "10.0.0.0/8", "172.16.0.0/12", "192.168.0.0/16"]
|
32
|
+
@input = interface
|
33
|
+
@input_addr = Interfacez.ipv4_address_of(@input)
|
34
|
+
end
|
35
|
+
|
36
|
+
def self.select_cmd
|
37
|
+
id=`id -u`
|
38
|
+
if id == 0 then
|
39
|
+
@i = "iptables"
|
40
|
+
else
|
41
|
+
@i = "sudo iptables"
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
def self.ipt(line)
|
46
|
+
system("#{@i} #{line}")
|
47
|
+
end
|
48
|
+
|
49
|
+
def self.flush_rules
|
50
|
+
puts "flush"
|
51
|
+
ipt "-F"
|
52
|
+
ipt "-X"
|
53
|
+
ipt "-t nat -F"
|
54
|
+
ipt "-t nat -X"
|
55
|
+
ipt "-t mangle -F"
|
56
|
+
ipt "-t mangle -X"
|
57
|
+
ipt "-P INPUT DROP"
|
58
|
+
ipt "-P FORWARD DROP"
|
59
|
+
ipt "-P OUTPUT DROP"
|
60
|
+
end
|
61
|
+
|
62
|
+
def self.bogus_tcp_flags
|
63
|
+
puts "bogus"
|
64
|
+
ipt "-t mangle -A PREROUTING -p tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG NONE -j DROP"
|
65
|
+
ipt "-t mangle -A PREROUTING -p tcp --tcp-flags FIN,SYN FIN,SYN -j DROP"
|
66
|
+
ipt "-t mangle -A PREROUTING -p tcp --tcp-flags SYN,RST SYN,RST -j DROP"
|
67
|
+
ipt "-t mangle -A PREROUTING -p tcp --tcp-flags FIN,RST FIN,RST -j DROP"
|
68
|
+
ipt "-t mangle -A PREROUTING -p tcp --tcp-flags FIN,ACK FIN -j DROP"
|
69
|
+
ipt "-t mangle -A PREROUTING -p tcp --tcp-flags ACK,URG URG -j DROP"
|
70
|
+
ipt "-t mangle -A PREROUTING -p tcp --tcp-flags ACK,FIN FIN -j DROP"
|
71
|
+
ipt "-t mangle -A PREROUTING -p tcp --tcp-flags ACK,PSH PSH -j DROP"
|
72
|
+
ipt "-t mangle -A PREROUTING -p tcp --tcp-flags ALL ALL -j DROP"
|
73
|
+
ipt "-t mangle -A PREROUTING -p tcp --tcp-flags ALL NONE -j DROP"
|
74
|
+
ipt "-t mangle -A PREROUTING -p tcp --tcp-flags ALL FIN,PSH,URG -j DROP"
|
75
|
+
ipt "-t mangle -A PREROUTING -p tcp --tcp-flags ALL SYN,FIN,PSH,URG -j DROP"
|
76
|
+
ipt "-t mangle -A PREROUTING -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -j DROP"
|
77
|
+
end
|
78
|
+
|
79
|
+
def self.bad_packets
|
80
|
+
puts "bad_packets"
|
81
|
+
# new packet not syn
|
82
|
+
ipt "-t mangle -A PREROUTING -p tcp ! --syn -m conntrack --ctstate NEW -j DROP"
|
83
|
+
# fragment packet
|
84
|
+
ipt "-A INPUT -f -j DROP"
|
85
|
+
# XMAS
|
86
|
+
ipt "-A INPUT -p tcp --tcp-flags ALL ALL -j DROP"
|
87
|
+
# null packet
|
88
|
+
ipt "-A INPUT -p tcp --tcp-flags ALL NONE -j DROP"
|
89
|
+
end
|
90
|
+
|
91
|
+
def self.spoofing
|
92
|
+
subs=["224.0.0.0/3", "169.254.0.0/16", "172.16.0.0/12", "192.0.2.0/24", "0.0.0.0/8", "240.0.0.0/5"]
|
93
|
+
subs.each do |sub|
|
94
|
+
ipt "-t mangle -A PREROUTING -s #{sub} -j DROP"
|
95
|
+
end
|
96
|
+
ipt "-t mangle -A PREROUTING -s #{@lo_addr}/8 ! -i #{@lo} -j DROP"
|
97
|
+
end
|
98
|
+
|
99
|
+
def self.icmp
|
100
|
+
puts "icmp"
|
101
|
+
ipt "-N port-scanning"
|
102
|
+
ipt "-A port-scanning -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s --limit-burst 2 -j RETURN"
|
103
|
+
ipt "-A port-scanning -j DROP"
|
104
|
+
|
105
|
+
ipt "-N syn_flood"
|
106
|
+
ipt "-A INPUT -p tcp --syn -j syn_flood"
|
107
|
+
ipt "-A syn_flood -m limit --limit 1/s --limit-burst 3 -j RETURN"
|
108
|
+
ipt "-A syn_flood -j DROP"
|
109
|
+
|
110
|
+
ipt "-A INPUT -p icmp -m limit --limit 1/s --limit-burst 1 -j ACCEPT"
|
111
|
+
ipt "-A INPUT -p icmp -m limit --limit 1/s --limit-burst 1 -j LOG --log-prefix PING-DROP:"
|
112
|
+
ipt "-A INPUT -p icmp -j DROP"
|
113
|
+
end
|
114
|
+
|
115
|
+
def self.dns
|
116
|
+
puts "dns"
|
117
|
+
ipt "-t nat -A PREROUTING ! -i #{@lo} -p udp -m udp --dport 53 -j REDIRECT --to-ports #{@tor_dns}"
|
118
|
+
ipt "-t nat -A OUTPUT -p udp -m udp --dport 53 -j REDIRECT --to-ports #{@tor_dns}"
|
119
|
+
ipt "-t nat -A OUTPUT -p tcp -m tcp --dport 53 -j REDIRECT --to-ports #{@tor_dns}"
|
120
|
+
end
|
121
|
+
|
122
|
+
def self.nat
|
123
|
+
puts "nat"
|
124
|
+
# nat .onion addresses
|
125
|
+
ipt "-t nat -A OUTPUT -d #{@virt_addr} -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -j REDIRECT --to-ports #{@trans_port}"
|
126
|
+
|
127
|
+
# Don't nat the Tor process, the loopback, or the local network
|
128
|
+
ipt "-t nat -A OUTPUT -m owner --uid-owner #{@tor_uid} -j RETURN"
|
129
|
+
ipt "-t nat -A OUTPUT -o #{@lo} -j RETURN"
|
130
|
+
|
131
|
+
# Allow lan access for hosts in $non_tor
|
132
|
+
@non_tor.each do |lan|
|
133
|
+
ipt "-t nat -A OUTPUT -d #{lan} -j RETURN"
|
134
|
+
end
|
135
|
+
|
136
|
+
# Redirects all other pre-routing and output to Tor's TransPort
|
137
|
+
ipt "-t nat -A OUTPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -j REDIRECT --to-ports #{@trans_port}"
|
138
|
+
|
139
|
+
# Redirects all other pre-routing and output to Tor's TransPort
|
140
|
+
ipt "-t nat -A OUTPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -j REDIRECT --to-ports #{@trans_port}"
|
141
|
+
|
142
|
+
# input
|
143
|
+
ipt "-A INPUT -m state --state ESTABLISHED -j ACCEPT"
|
144
|
+
ipt "-A INPUT -i #{@lo} -j ACCEPT"
|
145
|
+
|
146
|
+
# output
|
147
|
+
ipt "-A OUTPUT -m owner --uid-owner #{@tor_uid} -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -m state --state NEW -j ACCEPT"
|
148
|
+
|
149
|
+
# Allow loopback output
|
150
|
+
ipt "-A OUTPUT -d #{@lo_addr}/32 -o #{@lo} -j ACCEPT"
|
151
|
+
|
152
|
+
# tor transparent magic
|
153
|
+
ipt "-A OUTPUT -d #{@lo_addr}/32 -p tcp -m tcp --dport #{@trans_port} --tcp-flags FIN,SYN,RST,ACK SYN -j ACCEPT"
|
154
|
+
|
155
|
+
ipt "-t filter -A OUTPUT -p udp -j REJECT"
|
156
|
+
ipt "-t filter -A OUTPUT -p icmp -j REJECT"
|
157
|
+
end
|
158
|
+
|
159
|
+
def self.input
|
160
|
+
puts "input"
|
161
|
+
ipt "-A INPUT -m conntrack --ctstate INVALID -j LOG --log-prefix \"DROP INVALID \" --log-ip-options --log-tcp-options"
|
162
|
+
ipt "-A INPUT -m conntrack --ctstate INVALID -j DROP"
|
163
|
+
ipt "-A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT"
|
164
|
+
ipt "-A INPUT -i #{@input} ! -s #{@input_addr} -j LOG --log-prefix \"SPOOFED PKT \""
|
165
|
+
ipt "-A INPUT -i #{@input} ! -s #{@input_addr} -j DROP"
|
166
|
+
# ACCEPT rules
|
167
|
+
ipt "-A INPUT -i #{@input} -p tcp -s #{@input_addr} --dport 22 -m conntrack --ctstate NEW -j ACCEPT"
|
168
|
+
|
169
|
+
ipt "-A INPUT ! -i #{@lo} -j LOG --log-prefix \"DROP \" --log-ip-options --log-tcp-options"
|
170
|
+
ipt "-A INPUT -i #{@lo} -j ACCEPT"
|
171
|
+
end
|
172
|
+
|
173
|
+
def self.output
|
174
|
+
puts "output"
|
175
|
+
ipt "-A OUTPUT -m conntrack --ctstate INVALID -j LOG --log-prefix \"DROP INVALID \" --log-ip-options --log-tcp-options"
|
176
|
+
ipt "-A OUTPUT -m conntrack --ctstate INVALID -j DROP"
|
177
|
+
ipt "-A OUTPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT"
|
178
|
+
|
179
|
+
# ACCEPT rules
|
180
|
+
ipt "-A OUTPUT -p tcp --dport 22 -m conntrack --ctstate NEW -j ACCEPT"
|
181
|
+
ipt "-A OUTPUT ! -o #{@lo} -j LOG --log-prefix \"DROP \" --log-ip-options --log-tcp-options"
|
182
|
+
ipt "-A OUTPUT -o #{@lo} -j ACCEPT"
|
183
|
+
end
|
184
|
+
|
185
|
+
def self.forward
|
186
|
+
puts "forward"
|
187
|
+
ipt "-A FORWARD -m conntrack --ctstate INVALID -j LOG --log-prefix \"DROP INVALID \" --log-ip-options --log-tcp-options"
|
188
|
+
ipt "-A FORWARD -m conntrack --ctstate INVALID -j DROP"
|
189
|
+
ipt "-A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT"
|
190
|
+
ipt "-A FORWARD -i #{@input} ! -s #{@input_addr} -j LOG --log-prefix \"SPOOFED PKT \""
|
191
|
+
ipt "-A FORWARD -i #{@input} ! -s #{@input_addr} -j DROP"
|
192
|
+
end
|
193
|
+
end
|
194
|
+
end
|
data/lib/spior/mac.rb
CHANGED
@@ -1,52 +1,23 @@
|
|
1
1
|
require "pathname"
|
2
|
-
require "interfacez"
|
3
2
|
require_relative "msg"
|
4
3
|
|
5
4
|
module Spior
|
6
|
-
|
5
|
+
module MAC
|
6
|
+
extend self
|
7
7
|
|
8
|
-
def
|
8
|
+
def randomize(interface)
|
9
9
|
@network_int = interface
|
10
|
-
@check = false
|
11
10
|
check_dep
|
12
|
-
verify_card
|
13
|
-
if @check == false then
|
14
|
-
puts "Checking network interface..."
|
15
|
-
ask_for_card
|
16
|
-
end
|
17
11
|
system("deceitmac --interface #{@network_int} --random --dhcpcd --tor --no-banner")
|
18
12
|
end
|
19
13
|
|
20
14
|
private
|
21
15
|
|
22
|
-
def
|
16
|
+
def check_dep
|
23
17
|
if ! Pathname.new("/usr/local/bin/deceitmac") then
|
24
18
|
Msg.error "deceitmac is not installed, please, exec spior --install"
|
25
19
|
exit(-1)
|
26
20
|
end
|
27
21
|
end
|
28
|
-
|
29
|
-
def self.verify_card
|
30
|
-
return if @check or not @network_int
|
31
|
-
Interfacez.all do |interface|
|
32
|
-
if interface == @network_int then
|
33
|
-
@check = true
|
34
|
-
end
|
35
|
-
end
|
36
|
-
if not @check then
|
37
|
-
Msg.err "Your interface #{@network_int} is no found"
|
38
|
-
end
|
39
|
-
end
|
40
|
-
|
41
|
-
def self.ask_for_card
|
42
|
-
until @check == true
|
43
|
-
Interfacez.all do |interface|
|
44
|
-
print interface + " "
|
45
|
-
end
|
46
|
-
printf "\nWhich interface to randomize ? "
|
47
|
-
@network_int = gets.chomp
|
48
|
-
verify_card
|
49
|
-
end
|
50
|
-
end
|
51
22
|
end
|
52
23
|
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
require 'interfacez'
|
2
|
+
require_relative 'msg'
|
3
|
+
|
4
|
+
module Spior
|
5
|
+
class Network
|
6
|
+
attr_accessor :card
|
7
|
+
|
8
|
+
def initialize(name = false)
|
9
|
+
@name = name
|
10
|
+
@check = false
|
11
|
+
end
|
12
|
+
|
13
|
+
def card
|
14
|
+
verify_card
|
15
|
+
if @check == false then
|
16
|
+
ask_for_card
|
17
|
+
end
|
18
|
+
@name
|
19
|
+
end
|
20
|
+
|
21
|
+
private
|
22
|
+
|
23
|
+
def verify_card
|
24
|
+
return if @check or not @name
|
25
|
+
Interfacez.all do |interface|
|
26
|
+
if interface == @name then
|
27
|
+
@check = true
|
28
|
+
end
|
29
|
+
end
|
30
|
+
if not @check then
|
31
|
+
Msg.err "Your interface #{@name} is no found"
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
def ask_for_card
|
36
|
+
until @check == true
|
37
|
+
Interfacez.all do |interface|
|
38
|
+
print interface + " "
|
39
|
+
end
|
40
|
+
printf "\nWhat is the name of the card to be used? "
|
41
|
+
@name = gets.chomp
|
42
|
+
verify_card
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
data/lib/spior/options.rb
CHANGED
@@ -3,12 +3,13 @@ require_relative 'status'
|
|
3
3
|
|
4
4
|
module Spior
|
5
5
|
class Options
|
6
|
-
attr_reader :install , :copy, :mac , :interface
|
6
|
+
attr_reader :install , :copy, :mac , :interface , :tor
|
7
7
|
|
8
8
|
def initialize(argv)
|
9
9
|
@install = false
|
10
10
|
@copy = false
|
11
11
|
@mac = false
|
12
|
+
@tor = false
|
12
13
|
parse(argv)
|
13
14
|
end
|
14
15
|
|
@@ -25,12 +26,16 @@ module Spior
|
|
25
26
|
@copy = true
|
26
27
|
end
|
27
28
|
|
29
|
+
opts.on("-c", "--card NAME", "The name of the target network card") do |net|
|
30
|
+
@interface = net
|
31
|
+
end
|
32
|
+
|
28
33
|
opts.on("-m", "--mac", "Change your mac") do
|
29
34
|
@mac = true
|
30
35
|
end
|
31
36
|
|
32
|
-
opts.on("-
|
33
|
-
@
|
37
|
+
opts.on("-t", "--tor", "Redirect traffic through TOR") do
|
38
|
+
@tor = true
|
34
39
|
end
|
35
40
|
|
36
41
|
opts.on("-s", "--status", "Look infos about your current ip") do
|
data/lib/spior/runner.rb
CHANGED
@@ -2,12 +2,15 @@ require_relative 'options'
|
|
2
2
|
require_relative 'install'
|
3
3
|
require_relative 'copy'
|
4
4
|
require_relative 'mac'
|
5
|
+
require_relative 'iptables'
|
6
|
+
require_relative 'network'
|
5
7
|
require_relative 'msg'
|
6
8
|
|
7
9
|
module Spior
|
8
10
|
class Runner
|
9
11
|
def initialize(argv)
|
10
12
|
@options = Options.new(argv)
|
13
|
+
@network = false
|
11
14
|
end
|
12
15
|
|
13
16
|
def run
|
@@ -21,7 +24,17 @@ module Spior
|
|
21
24
|
end
|
22
25
|
if @options.mac then
|
23
26
|
Msg.head
|
24
|
-
|
27
|
+
if not @network
|
28
|
+
@network = Spior::Network.new(@options.interface)
|
29
|
+
end
|
30
|
+
Spior::MAC::randomize(@network.card)
|
31
|
+
end
|
32
|
+
if @options.tor then
|
33
|
+
Msg.head
|
34
|
+
if not @network
|
35
|
+
@network = Spior::Network.new(@options.interface)
|
36
|
+
end
|
37
|
+
Spior::Iptables::tor(@network.card)
|
25
38
|
end
|
26
39
|
end
|
27
40
|
end
|
data/spior.gemspec
CHANGED
@@ -3,8 +3,7 @@ Gem::Specification.new do |s|
|
|
3
3
|
|
4
4
|
s.summary = "A tool to make TOR your default gateway and randomize your hardware"
|
5
5
|
s.description = <<-EOF
|
6
|
-
A tool to make TOR your default gateway and randomize your hardware
|
7
|
-
Status: not yet functionnal, please wait for the next releases !"
|
6
|
+
A tool to make TOR your default gateway and randomize your hardware.
|
8
7
|
EOF
|
9
8
|
|
10
9
|
s.metadata = {
|
@@ -13,7 +12,7 @@ Gem::Specification.new do |s|
|
|
13
12
|
"wiki_uri" => "https://github.com/szorfein/spior"
|
14
13
|
}
|
15
14
|
|
16
|
-
s.version = "0.0.
|
15
|
+
s.version = "0.0.5"
|
17
16
|
s.requirements << 'tor'
|
18
17
|
s.requirements << 'sudo'
|
19
18
|
s.requirements << 'iptables'
|
data.tar.gz.sig
CHANGED
Binary file
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: spior
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- szorfein
|
@@ -35,7 +35,7 @@ cert_chain:
|
|
35
35
|
J/zT/q2Ac7BWpSLbv6p9lChBiEnD9j24x463LR5QQjDNS5SsjzRQfFuprsa9Nqf2
|
36
36
|
Tw==
|
37
37
|
-----END CERTIFICATE-----
|
38
|
-
date: 2020-05-
|
38
|
+
date: 2020-05-04 00:00:00.000000000 Z
|
39
39
|
dependencies:
|
40
40
|
- !ruby/object:Gem::Dependency
|
41
41
|
name: rainbow
|
@@ -65,9 +65,7 @@ dependencies:
|
|
65
65
|
- - '='
|
66
66
|
- !ruby/object:Gem::Version
|
67
67
|
version: 1.0.3
|
68
|
-
description:
|
69
|
-
A tool to make TOR your default gateway and randomize your hardware
|
70
|
-
Status: not yet functionnal, please wait for the next releases !"
|
68
|
+
description: " A tool to make TOR your default gateway and randomize your hardware.\n"
|
71
69
|
email: szorfein@protonmail.com
|
72
70
|
executables:
|
73
71
|
- spior
|
@@ -88,8 +86,10 @@ files:
|
|
88
86
|
- conf/torrc
|
89
87
|
- lib/spior/copy.rb
|
90
88
|
- lib/spior/install.rb
|
89
|
+
- lib/spior/iptables.rb
|
91
90
|
- lib/spior/mac.rb
|
92
91
|
- lib/spior/msg.rb
|
92
|
+
- lib/spior/network.rb
|
93
93
|
- lib/spior/options.rb
|
94
94
|
- lib/spior/runner.rb
|
95
95
|
- lib/spior/status.rb
|
metadata.gz.sig
CHANGED
Binary file
|