apscanner 1.0.0 → 1.1.0
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 +4 -4
- data/lib/apscanner.rb +2 -0
- data/lib/apscanner/entities/snmp_manager.rb +19 -25
- data/lib/apscanner/entities/snmp_parser.rb +41 -2
- data/lib/apscanner/version.rb +1 -1
- metadata +16 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b33cb59b6b8ec81b5980993dc67d4ea78cf7994e
|
4
|
+
data.tar.gz: d18e543c5ac23b6a7dc39ebcde258695e6344ebf
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: fc2bc9d0510fe82bdae6aabf99f780a5d695910150da244d9af474a5cfd309b959bc5a43ef618869b12482a610d6104f834854978a0c37ad474e517001914254
|
7
|
+
data.tar.gz: f28722c4d72b17c434d497597632aa34f2f97142748c4c526139d82e99e7a805b520425bd68c996bff0e82405b67876852fc821d0011e72f8b060cce9d818ddf
|
data/lib/apscanner.rb
CHANGED
@@ -1,12 +1,14 @@
|
|
1
1
|
require 'apscanner/loggable'
|
2
2
|
require 'apscanner/scanner'
|
3
3
|
require 'apscanner/entities/snmp_manager'
|
4
|
+
require 'apscanner/entities/snmp_parser'
|
4
5
|
require 'apscanner/entities/sensor'
|
5
6
|
require 'apscanner/entities/access_point'
|
6
7
|
|
7
8
|
require 'snmp4em'
|
8
9
|
require 'json'
|
9
10
|
require 'logger'
|
11
|
+
require 'pry'
|
10
12
|
|
11
13
|
module Apscanner
|
12
14
|
extend Loggable
|
@@ -6,8 +6,9 @@ module Apscanner
|
|
6
6
|
mac: '1.3.6.1.4.1.9.9.513.1.1.1.1.2'
|
7
7
|
},
|
8
8
|
meraki: {
|
9
|
-
|
10
|
-
mac: '1.3.6.1.4.1.29671.1.1.4.1.
|
9
|
+
system: '1.3.6.1.4.1.29671.1.1.4.1',
|
10
|
+
mac: '1.3.6.1.4.1.29671.1.1.4.1.1',
|
11
|
+
name: '1.3.6.1.4.1.29671.1.1.4.1.2'
|
11
12
|
}
|
12
13
|
}.freeze
|
13
14
|
|
@@ -17,12 +18,16 @@ module Apscanner
|
|
17
18
|
|
18
19
|
def run
|
19
20
|
response = request_by_type
|
20
|
-
return [] if
|
21
|
-
|
21
|
+
return [] if empty?(response)
|
22
|
+
SnmpParser.new(response, @sensor.type).run
|
22
23
|
end
|
23
24
|
|
24
25
|
private
|
25
26
|
|
27
|
+
def empty?(response)
|
28
|
+
response.empty? || response.values.uniq == [{}]
|
29
|
+
end
|
30
|
+
|
26
31
|
def manager
|
27
32
|
SNMP4EM::Manager.new(
|
28
33
|
host: @sensor.ip_address,
|
@@ -33,11 +38,16 @@ module Apscanner
|
|
33
38
|
)
|
34
39
|
end
|
35
40
|
|
41
|
+
def oids(type)
|
42
|
+
oids = SNMP_OID[type].values
|
43
|
+
type == :wlc ? oids : [oids.first]
|
44
|
+
end
|
45
|
+
|
36
46
|
def discover
|
37
47
|
response = {}
|
38
|
-
SNMP_OID.each do |type
|
39
|
-
response = request(oids
|
40
|
-
unless
|
48
|
+
SNMP_OID.keys.each do |type|
|
49
|
+
response = request(oids(type))
|
50
|
+
unless empty?(response)
|
41
51
|
@sensor.type = type
|
42
52
|
break
|
43
53
|
end
|
@@ -47,7 +57,7 @@ module Apscanner
|
|
47
57
|
|
48
58
|
def request_by_type
|
49
59
|
if SNMP_OID.keys.include?(@sensor.type)
|
50
|
-
request(
|
60
|
+
request(oids(@sensor.type))
|
51
61
|
else
|
52
62
|
discover
|
53
63
|
end
|
@@ -69,22 +79,6 @@ module Apscanner
|
|
69
79
|
end
|
70
80
|
end
|
71
81
|
response
|
72
|
-
end
|
73
|
-
|
74
|
-
def parse(response, oids)
|
75
|
-
access_points = []
|
76
|
-
response[oids[:mac]].each do |oid, value|
|
77
|
-
ap_oid = oid.gsub("#{oids[:mac]}.", '')
|
78
|
-
access_points << AccessPoint.new(
|
79
|
-
name: response[oids[:name]][oids[:name] + '.' + ap_oid],
|
80
|
-
mac_address: parse_mac(value)
|
81
|
-
)
|
82
|
-
end
|
83
|
-
access_points
|
84
|
-
end
|
85
|
-
|
86
|
-
def parse_mac(mac)
|
87
|
-
mac.unpack('H2H2H2H2H2H2').join(':').upcase
|
88
|
-
end
|
82
|
+
end
|
89
83
|
end
|
90
84
|
end
|
@@ -1,7 +1,46 @@
|
|
1
1
|
module Apscanner
|
2
2
|
class SnmpParser
|
3
|
-
def initialize(
|
4
|
-
@
|
3
|
+
def initialize(response, type)
|
4
|
+
@response = response
|
5
|
+
@type = type
|
6
|
+
@oids = SnmpManager::SNMP_OID[type]
|
7
|
+
end
|
8
|
+
|
9
|
+
def run
|
10
|
+
send("parse_#{@type}")
|
11
|
+
end
|
12
|
+
|
13
|
+
private
|
14
|
+
|
15
|
+
def parse_wlc
|
16
|
+
parse
|
17
|
+
end
|
18
|
+
|
19
|
+
def parse_meraki
|
20
|
+
parsed_response = {
|
21
|
+
@oids[:mac] => @response[@oids[:system]].select do |k, _|
|
22
|
+
k.include?("#{@oids[:mac]}.")
|
23
|
+
end,
|
24
|
+
@oids[:name] => @response[@oids[:system]].select do |k, _|
|
25
|
+
k.include?("#{@oids[:name]}.")
|
26
|
+
end
|
27
|
+
}
|
28
|
+
@response = parsed_response
|
29
|
+
parse
|
30
|
+
end
|
31
|
+
|
32
|
+
def parse
|
33
|
+
@response[@oids[:mac]].map do |oid, value|
|
34
|
+
ap_oid = oid.gsub("#{@oids[:mac]}.", '')
|
35
|
+
AccessPoint.new(
|
36
|
+
name: @response[@oids[:name]][@oids[:name] + '.' + ap_oid],
|
37
|
+
mac_address: parse_mac(value)
|
38
|
+
)
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
def parse_mac(mac)
|
43
|
+
mac.unpack('H2H2H2H2H2H2').join(':').upcase
|
5
44
|
end
|
6
45
|
end
|
7
46
|
end
|
data/lib/apscanner/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: apscanner
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Julio J Garcia Perez
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-03-
|
11
|
+
date: 2016-03-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -38,6 +38,20 @@ dependencies:
|
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '10.0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: pry
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
41
55
|
- !ruby/object:Gem::Dependency
|
42
56
|
name: snmp4em
|
43
57
|
requirement: !ruby/object:Gem::Requirement
|