wmap 2.5.8 → 2.5.9

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.
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