wmap 2.5.8 → 2.5.9

Sign up to get free protection for your applications and to get access to all the features.
Files changed (4) hide show
  1. checksums.yaml +4 -4
  2. data/lib/wmap/cidr_tracker.rb +152 -185
  3. data/version.txt +1 -1
  4. metadata +1 -1
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 206a57aad53184de5f3d18db83f17b80aa5632c473830f287ba010dfec4a2523
4
- data.tar.gz: 1ef57c9b72338a911731a456abe9ae15f2f9dbbc16a67c541da030b747966cd4
3
+ metadata.gz: 940635362c6d612134a052e37c5bbcd49ad7a8bb801b5a767ea4a59d141740ee
4
+ data.tar.gz: 3538d199e5fe4c9fad108a87a96d002ca76e290a42bda9714e0d655ac7d9ef80
5
5
  SHA512:
6
- metadata.gz: 4144ba6f0955f87ed5979c0b2069caa78ca77512214ac10d71a806c44d7c50f100e53d555a16f1a58a0304559db370edb2ffa0b946ea900d237afcf541ad3787
7
- data.tar.gz: 1d43596929956315a79d5fd09fa453e241be7f7b5de0c6cdc87efe93422faf7f5bd5ffff94fe478d03e1c9ad494653319d50ccb949874e008e7fbf71744d2557
6
+ metadata.gz: c458e2c002a4aea5552cb2698c6776adab599aca664aa8f750b9fd42a9920634489e138c589dd58d9cb2924b2920cd5c0daf0731285ecb58fcb0bae45dfae8aa
7
+ data.tar.gz: c07aa8ccd2f405535eeb48f675b76690bba42d3c5f2d7649b7170df873ab421f38532651c45bc09967bd3a761a87639cc5f1fb64cd189afead956f946376c27e
@@ -18,195 +18,173 @@ class Wmap::CidrTracker
18
18
  @verbose=params.fetch(:verbose, false)
19
19
  @data_dir=params.fetch(:data_dir, File.dirname(__FILE__)+'/../../data/')
20
20
  Dir.mkdir(@data_dir) unless Dir.exist?(@data_dir)
21
- @file_cidr_seeds=params.fetch(:cidr_seeds, @data_dir + 'cidrs')
22
- @known_cidr_blks={}
23
- @known_cidr_blks_desc_index=[]
24
- @known_cidr_blks_asce_index=[]
25
- File.write(@file_cidr_seeds, "") unless File.exist?(@file_cidr_seeds)
26
- load_cidr_blks_from_file(@file_cidr_seeds)
21
+ @cidr_seeds=params.fetch(:cidr_seeds, @data_dir + 'cidrs')
22
+ File.write(@cidr_seeds, "") unless File.exist?(@cidr_seeds)
23
+ load_cidr_blks_from_file(@cidr_seeds)
27
24
  end
28
25
 
29
26
  # Main worker method to retrieve known network information for a host / ip
30
27
  def cidr_worker (host)
31
28
  puts "Starting tracking of known CIDR information for host: #{host}" if @verbose
32
- begin
33
- host=host.strip.downcase
34
- ip=host_2_ip(host)
35
- cidr=cidr_lookup(ip)
36
- ref=get_cidr_ref(cidr)
37
- netname=get_cidr_netname(cidr)
38
- # save the data
39
- tracker=Hash.new
40
- tracker['host']=host
41
- tracker['ip']=ip
42
- tracker['cidr']=cidr
43
- tracker['ref']=ref
44
- tracker['netname']=netname
45
- return tracker
46
- rescue => ee
47
- puts "Exception on method #{__method__} for host #{host}: #{ee}" # if @verbose
48
- return nil
49
- end
29
+ host=host.strip.downcase
30
+ ip=host_2_ip(host)
31
+ cidr=cidr_lookup(ip)
32
+ ref=get_cidr_ref(cidr)
33
+ netname=get_cidr_netname(cidr)
34
+ # save the data
35
+ tracker=Hash.new
36
+ tracker['host']=host
37
+ tracker['ip']=ip
38
+ tracker['cidr']=cidr
39
+ tracker['ref']=ref
40
+ tracker['netname']=netname
41
+ return tracker
42
+ rescue => ee
43
+ puts "Exception on method #{__method__} for host #{host}: #{ee}" # if @verbose
44
+ return nil
50
45
  end
51
46
  alias_method :track, :cidr_worker
52
47
 
53
48
  # 'setter' to load the known CIDR blocks into an instance variable @known_cidr_blks
54
- def load_cidr_blks_from_file (file_cidrs=@file_cidr_seeds)
49
+ def load_cidr_blks_from_file(file_cidrs=@cidr_seeds)
55
50
  puts "Load the known CIDR seed file: #{file_cidrs}" if @verbose
56
- begin
57
- f=File.open(file_cidrs, 'r')
58
- f.each do |line|
59
- entry=line.chomp.split(',')
60
- next unless is_cidr?(entry[0])
61
- puts "Loading: #{entry[0]}" if @verbose
62
- key=entry[0].strip
63
- @known_cidr_blks[key] = Hash.new if not @known_cidr_blks.key?(key)
64
- @known_cidr_blks[key]['ref']=entry[1].nil? ? nil : entry[1].strip
65
- @known_cidr_blks[key]['netname']=entry[2].nil? ? nil : entry[2].strip
66
- end
67
- f.close
68
- # Sort the blocks in order once for better performance. Update 10/29/2018 to support Netaddr 2.x syntax
69
- #@known_cidr_blks_desc_index=NetAddr.sort(@known_cidr_blks.keys, :Desc=>true)
70
- #@known_cidr_blks_asce_index=NetAddr.sort(@known_cidr_blks.keys, :Desc=>false)
71
- @known_cidr_blks_asce_index=@known_cidr_blks.keys.sort
72
- @known_cidr_blks_desc_index=@known_cidr_blks_asce_index.reverse
73
- rescue => ee
74
- puts "Exception on method #{__method__}: #{ee}" # if @verbose
51
+ f=File.open(file_cidrs, 'r')
52
+ f.each do |line|
53
+ entry=line.chomp.split(',')
54
+ next unless is_cidr?(entry[0])
55
+ puts "Loading: #{entry[0]}" if @verbose
56
+ key=entry[0].strip
57
+ @known_cidr_blks = Hash.new unless @known_cidr_blks
58
+ @known_cidr_blks[key] = Hash.new if not @known_cidr_blks.key?(key)
59
+ @known_cidr_blks[key]['ref']=entry[1].nil? ? nil : entry[1].strip
60
+ @known_cidr_blks[key]['netname']=entry[2].nil? ? nil : entry[2].strip
75
61
  end
62
+ f.close
63
+ # Sort the blocks in order once for better performance. Update 10/29/2018 to support Netaddr 2.x syntax
64
+ #@known_cidr_blks_desc_index=NetAddr.sort(@known_cidr_blks.keys, :Desc=>true)
65
+ #@known_cidr_blks_asce_index=NetAddr.sort(@known_cidr_blks.keys, :Desc=>false)
66
+ @known_cidr_blks_asce_index=@known_cidr_blks.keys.sort
67
+ @known_cidr_blks_desc_index=@known_cidr_blks_asce_index.reverse
68
+ #rescue => ee
69
+ # puts "Exception on method #{__method__}: #{ee}" # if @verbose
76
70
  end
77
71
 
78
72
  # 'setter' to add an entry to CIDR store @known_cidr_blks
79
73
  def add (cidr,ref=nil,netname=nil)
80
74
  puts "Load the entry into the CIDR store: #{cidr}"
81
- #begin
82
- raise "Unknown CIDR format: #{cidr}" unless is_cidr?(cidr)
83
- # Obtain the 'ref' and 'netname' value automatically in case not passed as method parameters
84
- if ref.nil? or netname.nil?
85
- whois = Wmap::Whois.new
86
- # Note 11/1/2014: Use IP instead of the CIDR to perform the query, as the current ruby-whois query does not support CIDR as query input
87
- ip=cidr.split("/")[0]
88
- ref=whois.get_net_desc(ip)
89
- netname=whois.get_netname(ip)
90
- whois=nil
91
- end
92
- if @known_cidr_blks.key?(cidr)
93
- puts "Skip! Entry is already exist: #{cidr}"
94
- return nil
95
- else
96
- @known_cidr_blks[cidr] = Hash.new
97
- @known_cidr_blks[cidr]['ref']=ref
98
- @known_cidr_blks[cidr]['netname']=netname
99
- puts "Entry loaded!"
100
- end
101
- # Re-sort the blocks in order for better performance
102
- #@known_cidr_blks_desc_index=NetAddr.sort(@known_cidr_blks.keys, :Desc=>true)
103
- #@known_cidr_blks_asce_index=NetAddr.sort(@known_cidr_blks.keys, :Desc=>false)
104
- @known_cidr_blks_asce_index=@known_cidr_blks.keys.sort
105
- @known_cidr_blks_desc_index=@known_cidr_blks_asce_index.reverse
106
- #rescue => ee
107
- # puts "Exception on method #{__method__}: #{ee}" # if @verbose
108
- #end
75
+ raise "Unknown CIDR format: #{cidr}" unless is_cidr?(cidr)
76
+ # Obtain the 'ref' and 'netname' value automatically in case not passed as method parameters
77
+ if ref.nil? or netname.nil?
78
+ whois = Wmap::Whois.new
79
+ # Note 11/1/2014: Use IP instead of the CIDR to perform the query, as the current ruby-whois query does not support CIDR as query input
80
+ ip=cidr.split("/")[0]
81
+ ref=whois.get_net_desc(ip)
82
+ netname=whois.get_netname(ip)
83
+ whois=nil
84
+ end
85
+ if @known_cidr_blks.key?(cidr)
86
+ puts "Skip! Entry is already exist: #{cidr}"
87
+ return nil
88
+ else
89
+ @known_cidr_blks[cidr] = Hash.new
90
+ @known_cidr_blks[cidr]['ref']=ref
91
+ @known_cidr_blks[cidr]['netname']=netname
92
+ puts "Entry loaded!"
93
+ end
94
+ # Re-sort the blocks in order for better performance
95
+ #@known_cidr_blks_desc_index=NetAddr.sort(@known_cidr_blks.keys, :Desc=>true)
96
+ #@known_cidr_blks_asce_index=NetAddr.sort(@known_cidr_blks.keys, :Desc=>false)
97
+ @known_cidr_blks_asce_index=@known_cidr_blks.keys.sort
98
+ @known_cidr_blks_desc_index=@known_cidr_blks_asce_index.reverse
99
+ #rescue => ee
100
+ # puts "Exception on method #{__method__}: #{ee}" # if @verbose
109
101
  end
110
102
 
111
103
  # 'setter' to remove an entry to CIDR store @known_cidr_blks
112
104
  def delete (cidr,ref=nil,netname=nil)
113
105
  puts "Remove the entry from the CIDR store: #{cidr}"
114
- begin
115
- #cidr.strip!
116
- raise "Unknown CIDR format: #{cidr}" unless is_cidr?(cidr)
117
- if @known_cidr_blks.key?(cidr)
118
- puts "Deleting ..."
119
- @known_cidr_blks.delete(cidr)
120
- puts "Entry cleared!"
121
- else
122
- raise "Unknown CIDR entry: #{cidr}"
123
- end
124
- # Re-sort the blocks in order for better performance
125
- #@known_cidr_blks_desc_index=NetAddr.sort(@known_cidr_blks.keys, :Desc=>true)
126
- #@known_cidr_blks_asce_index=NetAddr.sort(@known_cidr_blks.keys, :Desc=>false)
127
- @known_cidr_blks_asce_index=@known_cidr_blks.keys.sort
128
- @known_cidr_blks_desc_index=@known_cidr_blks_asce_index.reverse
129
- rescue => ee
130
- puts "Exception on method #{__method__}: #{ee}" # if @verbose
106
+ #cidr.strip!
107
+ raise "Unknown CIDR format: #{cidr}" unless is_cidr?(cidr)
108
+ if @known_cidr_blks.key?(cidr)
109
+ puts "Deleting ..."
110
+ @known_cidr_blks.delete(cidr)
111
+ puts "Entry cleared!"
112
+ else
113
+ raise "Unknown CIDR entry: #{cidr}"
131
114
  end
115
+ # Re-sort the blocks in order for better performance
116
+ #@known_cidr_blks_desc_index=NetAddr.sort(@known_cidr_blks.keys, :Desc=>true)
117
+ #@known_cidr_blks_asce_index=NetAddr.sort(@known_cidr_blks.keys, :Desc=>false)
118
+ @known_cidr_blks_asce_index=@known_cidr_blks.keys.sort
119
+ @known_cidr_blks_desc_index=@known_cidr_blks_asce_index.reverse
120
+ rescue => ee
121
+ puts "Exception on method #{__method__}: #{ee}" # if @verbose
132
122
  end
133
123
  alias_method :del, :delete
134
124
 
135
125
  # Count numbers of CIDR object entries in the CIDR cache table
136
126
  def count
137
127
  puts "Counting number of entries in the CIDR cache table ..." if @verbose
138
- begin
139
- cnt=0
140
- @known_cidr_blks.keys.map do |key|
141
- if is_cidr?(key)
142
- cnt=cnt+1
143
- end
128
+ cnt=0
129
+ @known_cidr_blks.keys.map do |key|
130
+ if is_cidr?(key)
131
+ cnt=cnt+1
144
132
  end
145
- puts "Current number of CIDR object entries: #{cnt}" if @verbose
146
- return cnt
147
- rescue => ee
148
- puts "Exception on method #{__method__}: #{ee}" if @verbose
149
133
  end
134
+ puts "Current number of CIDR object entries: #{cnt}" if @verbose
135
+ return cnt
136
+ rescue => ee
137
+ puts "Exception on method #{__method__}: #{ee}" if @verbose
150
138
  end
151
139
 
152
140
  # Count numbers of IPs within the trusted CIDR objects
153
141
  def counts
154
142
  puts "Counting number of IPs within the CIDR store:" if @verbose
155
- begin
156
- cnt=0
157
- @known_cidr_blks.keys.map do |key|
158
- cnt=cnt+size(key)
159
- end
160
- puts "Total number of trusted IPs: #{cnt}" if @verbose
161
- return cnt
162
- rescue => ee
163
- puts "Exception on method #{__method__}: #{ee}" if @verbose
143
+ cnt=0
144
+ @known_cidr_blks.keys.map do |key|
145
+ cnt=cnt+size(key)
164
146
  end
147
+ puts "Total number of trusted IPs: #{cnt}" if @verbose
148
+ return cnt
149
+ rescue => ee
150
+ puts "Exception on method #{__method__}: #{ee}" if @verbose
165
151
  end
166
152
 
167
153
  # Check if the specific IP within the range of a list of known CIDR blocks
168
154
  def ip_trusted? (ip)
169
155
  puts "Check if the IP within the range of the known CIDR blocks: #{ip}" if @verbose
170
156
  known = false
171
- begin
172
- return false if @known_cidr_blks==nil
173
- first_octet_ip = ip.split('.').first.to_i
174
- @known_cidr_blks_desc_index.each do |line|
175
- first_octet_blk = line.split('.').first.to_i
176
- next if first_octet_blk > first_octet_ip
177
- puts "line: #{line}" if @verbose
178
- cidr4 = NetAddr::CIDR.create(line)
179
- known = cidr4.contains?(ip+'/32')
180
- break if known
181
- end
182
- rescue => ee
183
- if @verbose
184
- puts "Exception on method #{__method__}: #{ee}"
185
- end
186
- return false
157
+ return false if @known_cidr_blks==nil
158
+ first_octet_ip = ip.split('.').first.to_i
159
+ @known_cidr_blks_desc_index.each do |line|
160
+ first_octet_blk = line.split('.').first.to_i
161
+ next if first_octet_blk > first_octet_ip
162
+ puts "line: #{line}" if @verbose
163
+ cidr4 = NetAddr::CIDR.create(line)
164
+ known = cidr4.contains?(ip+'/32')
165
+ break if known
187
166
  end
188
- return known
167
+ rescue => ee
168
+ puts "Exception on method #{__method__}: #{ee}" if @verbose
169
+ return false
189
170
  end
190
171
  alias_method :is_trusted?, :ip_trusted?
191
172
 
192
173
  # Return the matching CIDR block for a ip
193
174
  def cidr_lookup (ip)
194
175
  puts "Lookup the CIDR name from the known CIDR list for the IP: #{ip}" if @verbose
195
- begin
196
- return nil if @known_cidr_blks==nil
197
- puts "CIDR Lookup: #{ip} ..." if @verbose
198
- @known_cidr_blks_desc_index.each do |line|
199
- first_octet_ip = ip.split('.').first.to_i
200
- first_octet_blk = line.split('.').first.to_i
201
- next if first_octet_blk > first_octet_ip
202
- cidr4 = NetAddr::CIDR.create(line)
203
- known = cidr4.contains?(ip+'/32')
204
- return line if known
205
- end
206
- rescue => ee
207
- puts "Exception on method #{__method__}: #{ee}" if @verbose
208
- return nil
176
+ return nil if @known_cidr_blks==nil
177
+ puts "CIDR Lookup: #{ip} ..." if @verbose
178
+ @known_cidr_blks_desc_index.each do |line|
179
+ first_octet_ip = ip.split('.').first.to_i
180
+ first_octet_blk = line.split('.').first.to_i
181
+ next if first_octet_blk > first_octet_ip
182
+ cidr4 = NetAddr::CIDR.create(line)
183
+ known = cidr4.contains?(ip+'/32')
184
+ return line if known
209
185
  end
186
+ rescue => ee
187
+ puts "Exception on method #{__method__}: #{ee}" if @verbose
210
188
  return nil
211
189
  end
212
190
  alias_method :lookup, :cidr_lookup
@@ -218,15 +196,12 @@ class Wmap::CidrTracker
218
196
  known=false
219
197
  cidr=cidr.strip unless cidr.nil?
220
198
  cidr=cidr+"/32" if is_ip?(cidr)
221
- begin
222
- raise "Invalid CIDR format: #{cidr}" unless is_cidr?(cidr)
223
- return false if @known_cidr_blks==nil
224
- return true if @known_cidr_blks.key?(cidr)
225
- rescue => ee
226
- puts "Exception on method #{__method__}: #{ee}" if @verbose
227
- return false
228
- end
229
- return known
199
+ raise "Invalid CIDR format: #{cidr}" unless is_cidr?(cidr)
200
+ return false if @known_cidr_blks==nil
201
+ return true if @known_cidr_blks.key?(cidr)
202
+ rescue => ee
203
+ puts "Exception on method #{__method__}: #{ee}" if @verbose
204
+ return false
230
205
  end
231
206
  alias_method :is_known?, :cidr_known?
232
207
 
@@ -236,33 +211,28 @@ class Wmap::CidrTracker
236
211
  trusted=false
237
212
  cidr=cidr.strip unless cidr.nil?
238
213
  cidr=cidr+"/32" if is_ip?(cidr)
239
- begin
240
- raise "Invalid CIDR format: #{cidr}" unless is_cidr?(cidr)
241
- return false if @known_cidr_blks==nil
242
- return true if @known_cidr_blks.key?(cidr)
243
- @known_cidr_blks_asce_index.each do |line|
244
- cidr4 = NetAddr::CIDR.create(line)
245
- return true if cidr4.contains?(cidr)
246
- end
247
- rescue => ee
248
- puts "Exception on method #{__method__}: #{ee}" if @verbose
249
- return false
214
+ raise "Invalid CIDR format: #{cidr}" unless is_cidr?(cidr)
215
+ return false if @known_cidr_blks==nil
216
+ return true if @known_cidr_blks.key?(cidr)
217
+ @known_cidr_blks_asce_index.each do |line|
218
+ cidr4 = NetAddr::CIDR.create(line)
219
+ return true if cidr4.contains?(cidr)
250
220
  end
251
- return trusted
221
+ rescue => ee
222
+ puts "Exception on method #{__method__}: #{ee}" if @verbose
223
+ return false
252
224
  end
253
225
  alias_method :is_trusted?, :cidr_trusted?
254
226
 
255
227
  # NetAddr wrapper to determine number of IPs within the CIDR object.
256
228
  def size (cidr)
257
229
  puts "Determine the size of CIDR object: #{cidr}" if @verbose
258
- begin
259
- raise "Invalid CIDR format: #{cidr}" unless is_cidr?(cidr)
260
- obj = NetAddr::CIDR.create(cidr)
261
- return obj.size.to_i
262
- rescue => ee
263
- puts "Exception on method #{__method__}: #{ee}" if @verbose
264
- return nil
265
- end
230
+ raise "Invalid CIDR format: #{cidr}" unless is_cidr?(cidr)
231
+ obj = NetAddr::CIDR.create(cidr)
232
+ return obj.size.to_i
233
+ rescue => ee
234
+ puts "Exception on method #{__method__}: #{ee}" if @verbose
235
+ return nil
266
236
  end
267
237
 
268
238
  # Retrieve the CIDR reference text for tracking purpose, if it's a known CIDR entry
@@ -282,23 +252,21 @@ class Wmap::CidrTracker
282
252
  end
283
253
 
284
254
  # Save the current cidr hash table into a file
285
- def save_cidrs_to_file!(file_cidrs=@file_cidr_seeds)
255
+ def save_cidrs_to_file!(file_cidrs=@cidr_seeds)
286
256
  puts "Saving the current cidrs cache table from memory to file: #{file_cidrs} ..." if @verbose
287
- #begin
288
- timestamp=Time.now
289
- f=File.open(file_cidrs, 'w')
290
- f.write "# Local cidrs file created by Wmap::CidrTracker.save method at: #{timestamp}\n"
291
- f.write "Network CIDR, CIDR RIPE Reference Text, CIDR NETNAME\n"
292
- @known_cidr_blks_asce_index.map do |key|
293
- ref=get_cidr_ref(key)
294
- netname=get_cidr_netname(key)
295
- f.write "#{key},#{ref},#{netname}\n"
296
- end
297
- f.close
298
- puts "CIDR cache table is successfully saved: #{file_cidrs}"
299
- #rescue => ee
300
- # puts "Exception on method #{__method__}: #{ee}" if @verbose
301
- #end
257
+ timestamp=Time.now
258
+ f=File.open(file_cidrs, 'w')
259
+ f.write "# Local cidrs file created by Wmap::CidrTracker.save method at: #{timestamp}\n"
260
+ f.write "Network CIDR, CIDR RIPE Reference Text, CIDR NETNAME\n"
261
+ @known_cidr_blks_asce_index.map do |key|
262
+ ref=get_cidr_ref(key)
263
+ netname=get_cidr_netname(key)
264
+ f.write "#{key},#{ref},#{netname}\n"
265
+ end
266
+ f.close
267
+ puts "CIDR cache table is successfully saved: #{file_cidrs}"
268
+ #rescue => ee
269
+ # puts "Exception on method #{__method__}: #{ee}" if @verbose
302
270
  end
303
271
  alias_method :save!, :save_cidrs_to_file!
304
272
 
@@ -330,6 +298,5 @@ class Wmap::CidrTracker
330
298
  end
331
299
  alias_method :print, :print_known_cidr_blks_asce
332
300
 
333
- private :load_cidr_blks_from_file
334
301
 
335
302
  end
data/version.txt CHANGED
@@ -3,7 +3,7 @@
3
3
  ###############################################################################
4
4
  package = wmap
5
5
  # wmap version 2.0 == web_discovery version 1.5.3
6
- version = 2.5.8
6
+ version = 2.5.9
7
7
  date = 2019-09-22
8
8
 
9
9
  author = Sam (Yang) Li
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: wmap
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.5.8
4
+ version: 2.5.9
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sam (Yang) Li