subnet_calc 0.1.2 → 0.2.0
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.tar.gz.sig +2 -1
- data/lib/subnet_calc.rb +71 -27
- metadata +2 -2
- metadata.gz.sig +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4bb254774e26a03f73b61199cb800765362710d7
|
4
|
+
data.tar.gz: b534f281a42f5d2119145881ebe9852fe5be0eb6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 435ad51490ff9c2b322e609917333c2450b2ac24621c5643ad8b453513192e4f279961b23f15d1b9e6fa2c4ca406e20614cd191ea872b27be076af1d53b9117c
|
7
|
+
data.tar.gz: 71c37c544ed68cf59919a8e41a9fc934d1c5be678f77cf8866e635520d9133575075c95023f72d396f1e34b1b1be8c7521c602257f3ef4ea748278e93a77b476
|
checksums.yaml.gz.sig
CHANGED
Binary file
|
data.tar.gz.sig
CHANGED
@@ -1 +1,2 @@
|
|
1
|
-
|
1
|
+
�r�iVk�INI��ˏIt�ύU�9�
|
2
|
+
ȱOm��N���b�]Wz�{��ݩ�W�b~�HȰ���R��I鄰���*YE,���Gi]�DS,
|
data/lib/subnet_calc.rb
CHANGED
@@ -28,6 +28,11 @@ class SubnetCalc
|
|
28
28
|
|
29
29
|
@inputs = inputs
|
30
30
|
default_inputs = {hosts: 254, ip: '192.168.0.0'}.merge(inputs)
|
31
|
+
|
32
|
+
# Using the input(s) supplied:
|
33
|
+
|
34
|
+
hosts = default_inputs[:hosts]
|
35
|
+
|
31
36
|
|
32
37
|
@prefixes = 1.upto(32).each_slice(8).to_a
|
33
38
|
|
@@ -66,7 +71,7 @@ class SubnetCalc
|
|
66
71
|
|
67
72
|
# determine what class of network we are using
|
68
73
|
|
69
|
-
class_type = 'c'
|
74
|
+
class_type = hosts <= 254 ? 'c' : 'b'
|
70
75
|
|
71
76
|
# Identify the network bits and the host bits
|
72
77
|
|
@@ -87,23 +92,20 @@ class SubnetCalc
|
|
87
92
|
|
88
93
|
# ------------------------------------
|
89
94
|
|
90
|
-
# Using the input(s) supplied:
|
91
|
-
|
92
|
-
hosts = default_inputs[:hosts]
|
93
|
-
|
94
95
|
|
95
96
|
|
96
97
|
# find the smallest decimal value to match the
|
97
98
|
# required number of hosts on a network
|
98
99
|
|
99
|
-
octet_n, col = hosts_per_subnet.reverse.detect {|x| x.last > hosts}
|
100
|
+
octet_n, col = hosts_per_subnet.reverse.detect {|x| x.last > hosts + 1}
|
100
101
|
|
101
102
|
bit = octets[octet_n].bits[col]
|
102
103
|
|
103
|
-
magic_number, prefix = bit.hosts_per_subnet, bit.prefix
|
104
|
-
|
105
|
-
no_of_subnets = (2 ** 8) / bit.hosts_per_subnet
|
104
|
+
magic_number, prefix = bit.hosts_per_subnet, bit.prefix
|
106
105
|
|
106
|
+
no_of_subnets = (2 ** 8.0) / bit.hosts_per_subnet
|
107
|
+
|
108
|
+
segments = (no_of_subnets >= 1 ? no_of_subnets : 256 / (256 * no_of_subnets)).to_i
|
107
109
|
n = col
|
108
110
|
|
109
111
|
# add the new mask to the octet
|
@@ -111,22 +113,17 @@ class SubnetCalc
|
|
111
113
|
octets[octet_n].mask = octets[octet_n].bits.map(&:decimal)[0..n].inject(:+)
|
112
114
|
subnet_mask = octets.map(&:mask).join('.')
|
113
115
|
|
114
|
-
subnets =
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
first = i + 1
|
120
|
-
last = broadcast - 1
|
121
|
-
r << OpenStruct.new({network: i, first: first, last: last,
|
122
|
-
broadcast: broadcast})
|
116
|
+
subnets = case class_type
|
117
|
+
when 'c'
|
118
|
+
class_subnets(segments, magic_number)
|
119
|
+
when 'b'
|
120
|
+
class_b_subnets(256 / segments, bit.decimal)
|
123
121
|
end
|
122
|
+
|
123
|
+
ip = (default_inputs[:ip] + ' ') .split('.')[0..octet_n-1]
|
124
124
|
|
125
|
-
|
126
|
-
|
127
|
-
first_ip = ip.join('.')
|
128
|
-
ip[class_n] = subnets.first.last
|
129
|
-
last_ip = ip.join('.')
|
125
|
+
first_ip = (ip + [subnets.first.first]).join('.')
|
126
|
+
last_ip = (ip + [subnets.first.last]).join('.')
|
130
127
|
|
131
128
|
result = {
|
132
129
|
class_type: class_type.upcase,
|
@@ -138,7 +135,7 @@ class SubnetCalc
|
|
138
135
|
subnets: subnets,
|
139
136
|
range: "%s-%s" % [first_ip, last_ip],
|
140
137
|
subnet_bits: n+1,
|
141
|
-
max_subnets:
|
138
|
+
max_subnets: segments
|
142
139
|
}
|
143
140
|
|
144
141
|
@octet_n = octet_n
|
@@ -151,9 +148,15 @@ class SubnetCalc
|
|
151
148
|
|
152
149
|
tfo = TableFormatter.new
|
153
150
|
|
154
|
-
tfo.source = @h[:subnets].map{|x| x.to_h.values.map(&:to_s) }
|
155
|
-
tfo.labels = %w(Network 1st last broadcast)
|
156
|
-
|
151
|
+
tfo.source = @h[:subnets].map.with_index{|x,i| ([i] + x.to_h.values).map(&:to_s) }
|
152
|
+
tfo.labels = %w(index Network 1st last broadcast)
|
153
|
+
full_subnets_table = tfo.display(markdown: true).to_s
|
154
|
+
|
155
|
+
subnets_table = if full_subnets_table.lines.length > 14 then
|
156
|
+
(full_subnets_table.lines[0..13] + ["\n ... "]).join
|
157
|
+
else
|
158
|
+
full_subnets_table
|
159
|
+
end
|
157
160
|
|
158
161
|
# octet broken down
|
159
162
|
|
@@ -214,6 +217,47 @@ EOF
|
|
214
217
|
|
215
218
|
private
|
216
219
|
|
220
|
+
def class_subnets(n, block_size)
|
221
|
+
|
222
|
+
i = 0
|
223
|
+
|
224
|
+
subnets = n.times.inject([]) do |r,n|
|
225
|
+
|
226
|
+
broadcast = i + block_size - 1
|
227
|
+
first = i + 1
|
228
|
+
last = broadcast - 1
|
229
|
+
|
230
|
+
|
231
|
+
|
232
|
+
h = if block_given? then
|
233
|
+
yield(i,first,last,broadcast)
|
234
|
+
else
|
235
|
+
{ network: i, first: first, last: last, broadcast: broadcast }
|
236
|
+
end
|
237
|
+
i += block_size
|
238
|
+
|
239
|
+
r << OpenStruct.new(h)
|
240
|
+
|
241
|
+
end
|
242
|
+
|
243
|
+
end
|
244
|
+
|
245
|
+
def class_b_subnets(n, block_size)
|
246
|
+
|
247
|
+
class_subnets(n, block_size) do |network, first, last, broadcast|
|
248
|
+
|
249
|
+
{
|
250
|
+
network: [network, 0].join('.'),
|
251
|
+
first: [network, 1].join('.'),
|
252
|
+
last: [broadcast, 254].join('.'),
|
253
|
+
broadcast: [broadcast, 255].join('.')
|
254
|
+
}
|
255
|
+
|
256
|
+
end
|
257
|
+
|
258
|
+
end
|
259
|
+
|
260
|
+
|
217
261
|
def indent(s, i=2)
|
218
262
|
s.lines.map{|x| ' ' * i + x}.join
|
219
263
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: subnet_calc
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- James Robertson
|
@@ -103,5 +103,5 @@ rubyforge_project:
|
|
103
103
|
rubygems_version: 2.5.1
|
104
104
|
signing_key:
|
105
105
|
specification_version: 4
|
106
|
-
summary: A subnet calculator (only tested for
|
106
|
+
summary: A subnet calculator (only tested for class C and class B networks)
|
107
107
|
test_files: []
|
metadata.gz.sig
CHANGED
Binary file
|