corona 0.0.5 → 0.0.8
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile.lock +3 -3
- data/bin/corona +7 -3
- data/corona.gemspec +2 -2
- data/lib/corona/cli.rb +27 -0
- data/lib/corona/core.rb +16 -13
- data/lib/corona/db/model.rb +1 -0
- data/lib/corona/model.rb +16 -1
- data/lib/corona/snmp.rb +4 -3
- metadata +5 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7e49adab5f337e985451474bbe92fafb21843669
|
4
|
+
data.tar.gz: db98d73fb163e1b7ade57187f6d1b13fcc0bdd4b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f3135206c5e6c516028e6c7eb7a0a24d97418d7da354d89bac8567786318c576eb6616111ba545fa0c1afe74e17a807baea64a31d3c8bb6bf8b55bc9525f716c
|
7
|
+
data.tar.gz: ba8bac0dfb90302c83bc07d6ce06bc23e8c96c824fe6a5793629b4b9ea93b93e99deccc2cca8380f2188c36886b05c4599e805030e51ec5c73add8c62732921c
|
data/Gemfile.lock
CHANGED
@@ -1,16 +1,17 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
corona (0.0.
|
4
|
+
corona (0.0.8)
|
5
5
|
sequel
|
6
|
+
slop
|
6
7
|
snmp
|
7
8
|
sqlite3
|
8
9
|
|
9
10
|
GEM
|
10
11
|
remote: https://rubygems.org/
|
11
12
|
specs:
|
12
|
-
rspec-core (2.14.7)
|
13
13
|
sequel (4.7.0)
|
14
|
+
slop (3.4.7)
|
14
15
|
snmp (1.1.1)
|
15
16
|
sqlite3 (1.3.8)
|
16
17
|
|
@@ -19,4 +20,3 @@ PLATFORMS
|
|
19
20
|
|
20
21
|
DEPENDENCIES
|
21
22
|
corona!
|
22
|
-
rspec-core
|
data/bin/corona
CHANGED
data/corona.gemspec
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
Gem::Specification.new do |s|
|
2
2
|
s.name = 'corona'
|
3
|
-
s.version = '0.0.
|
3
|
+
s.version = '0.0.8'
|
4
4
|
s.platform = Gem::Platform::RUBY
|
5
5
|
s.authors = [ 'Saku Ytti' ]
|
6
6
|
s.email = %w( saku@ytti.fi )
|
@@ -15,5 +15,5 @@ Gem::Specification.new do |s|
|
|
15
15
|
s.add_dependency 'sequel'
|
16
16
|
s.add_dependency 'sqlite3'
|
17
17
|
s.add_dependency 'snmp'
|
18
|
-
s.
|
18
|
+
s.add_dependency 'slop'
|
19
19
|
end
|
data/lib/corona/cli.rb
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
module Corona
|
2
|
+
class CLI
|
3
|
+
require 'corona'
|
4
|
+
require 'slop'
|
5
|
+
|
6
|
+
def run cidr=@cidr
|
7
|
+
Corona.new :cidr=>cidr
|
8
|
+
end
|
9
|
+
|
10
|
+
private
|
11
|
+
|
12
|
+
def initialize
|
13
|
+
args, opts = opts_parse
|
14
|
+
@cidr = args.shift
|
15
|
+
CFG.debug = true if opts[:debug]
|
16
|
+
end
|
17
|
+
|
18
|
+
def opts_parse
|
19
|
+
opts = Slop.parse(:help=>true) do
|
20
|
+
banner 'Usage: corona [cidr]'
|
21
|
+
on 'd', 'debug', 'Debugging on'
|
22
|
+
end
|
23
|
+
[opts.parse!, opts]
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|
27
|
+
end
|
data/lib/corona/core.rb
CHANGED
@@ -8,8 +8,8 @@ require 'resolv'
|
|
8
8
|
|
9
9
|
module Corona
|
10
10
|
class << self
|
11
|
-
def new
|
12
|
-
Core.new
|
11
|
+
def new opts={}
|
12
|
+
Core.new opts
|
13
13
|
end
|
14
14
|
end
|
15
15
|
|
@@ -17,15 +17,16 @@ module Corona
|
|
17
17
|
|
18
18
|
private
|
19
19
|
|
20
|
-
def initialize
|
21
|
-
|
22
|
-
|
23
|
-
@
|
24
|
-
|
20
|
+
def initialize opts={}
|
21
|
+
cidr = opts.delete :cidr
|
22
|
+
poll, ignores = resolve_networks cidr
|
23
|
+
@mutex = Mutex.new
|
24
|
+
@db = DB.new
|
25
|
+
threads = []
|
25
26
|
Thread.abort_on_exception = true
|
26
27
|
poll.each do |net|
|
27
28
|
net.to_range.each do |ip|
|
28
|
-
next if
|
29
|
+
next if ignores.any? { |ignore| ignore.include? ip }
|
29
30
|
while threads.size >= CFG.threads
|
30
31
|
threads.delete_if { |thread| not thread.alive? }
|
31
32
|
sleep 0.01
|
@@ -125,16 +126,17 @@ module Corona
|
|
125
126
|
{
|
126
127
|
:ip => opt[:ip].to_s,
|
127
128
|
:ptr => ip2name(opt[:ip].to_s),
|
128
|
-
:model => Model.map(opt[:oids][:sysDescr]),
|
129
|
+
:model => Model.map(opt[:oids][:sysDescr], opt[:oids][:sysObjectID]),
|
129
130
|
:oid_ifDescr => opt[:int],
|
130
131
|
:oid_sysName => opt[:oids][:sysName],
|
131
132
|
:oid_sysLocation => opt[:oids][:sysLocation],
|
132
133
|
:oid_sysDescr => opt[:oids][:sysDescr],
|
134
|
+
:oid_sysObjectID => opt[:oids][:sysObjectID].join('.'),
|
133
135
|
}
|
134
136
|
end
|
135
137
|
|
136
138
|
def normalize_opt opt
|
137
|
-
opt[:oids][:sysName].sub!
|
139
|
+
opt[:oids][:sysName].sub!(/-re[1-9]\./, '-re0.')
|
138
140
|
opt
|
139
141
|
end
|
140
142
|
|
@@ -142,14 +144,15 @@ module Corona
|
|
142
144
|
Resolv.getname ip rescue ip
|
143
145
|
end
|
144
146
|
|
145
|
-
def resolve_networks
|
146
|
-
[
|
147
|
+
def resolve_networks cidr
|
148
|
+
cidr = cidr ? [cidr].flatten : CFG.poll
|
149
|
+
[cidr, CFG.ignore].map do |nets|
|
147
150
|
if nets.respond_to? :each
|
148
151
|
nets.map { |net| IPAddr.new net }
|
149
152
|
else
|
150
153
|
out = []
|
151
154
|
File.read(nets).each_line do |net|
|
152
|
-
net = net.match
|
155
|
+
net = net.match(/^([\d.\/]+)/)
|
153
156
|
out.push IPAddr.new net[1] if net
|
154
157
|
end
|
155
158
|
out
|
data/lib/corona/db/model.rb
CHANGED
data/lib/corona/model.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
module Corona
|
2
2
|
class Model
|
3
|
-
def self.map sysDescr
|
3
|
+
def self.map sysDescr, sysObjectID
|
4
4
|
case sysDescr
|
5
5
|
when /Cisco Catalyst Operating System/i
|
6
6
|
'catos'
|
@@ -22,12 +22,27 @@ module Corona
|
|
22
22
|
'ironware'
|
23
23
|
when /^Summit/
|
24
24
|
'xos'
|
25
|
+
when /TiMOS/
|
26
|
+
'timos'
|
27
|
+
when /^Alcatel-Lucent \S+ [789]\./ #aos <7 is vxworks, >=7 is linux
|
28
|
+
'aos7'
|
29
|
+
when /^AOS-W/
|
30
|
+
'aosw'
|
25
31
|
when /^Alcatel-Lucent/
|
26
32
|
'aos'
|
33
|
+
when /^AX Series/
|
34
|
+
'acos'
|
27
35
|
when /ProCurve/ # ProCurve OS does not seem to have name?
|
28
36
|
'procurve'
|
29
37
|
when /^\d+[A-Z]\sEthernet Switch$/
|
30
38
|
'powerconnect'
|
39
|
+
else
|
40
|
+
case sysObjectID
|
41
|
+
when Regexp.new('^' + Regexp.quote('1.3.6.1.4.1.12356.'))
|
42
|
+
'fortios' # 1.3.6.1.4.1.12356.101.1.10004
|
43
|
+
else
|
44
|
+
'unsupported'
|
45
|
+
end
|
31
46
|
end
|
32
47
|
end
|
33
48
|
end
|
data/lib/corona/snmp.rb
CHANGED
@@ -2,14 +2,15 @@ module Corona
|
|
2
2
|
class SNMP
|
3
3
|
DB_OID = {
|
4
4
|
:sysDescr => '1.3.6.1.2.1.1.1.0',
|
5
|
-
:
|
5
|
+
:sysObjectID => '1.3.6.1.2.1.1.2.0',
|
6
6
|
:sysName => '1.3.6.1.2.1.1.5.0',
|
7
|
+
:sysLocation => '1.3.6.1.2.1.1.6.0',
|
7
8
|
}
|
8
9
|
OID = {
|
10
|
+
:ifDescr => '1.3.6.1.2.1.2.2.1.2',
|
9
11
|
:ipCidrRouteIfIndex => '1.3.6.1.2.1.4.24.4.1.5', # addr.255.255.255.255.0.0.0.0.0
|
10
12
|
:ipAdEntIfIndex => '1.3.6.1.2.1.4.20.1.2', # addr
|
11
13
|
:ipAddressIfIndex => '1.3.6.1.2.1.4.34.1.3', # 1,2 (uni,any) . 4,16 (size) . addr
|
12
|
-
:ifDescr => '1.3.6.1.2.1.2.2.1.2',
|
13
14
|
}
|
14
15
|
UNICAST = 1
|
15
16
|
IPV4 = 4
|
@@ -54,7 +55,7 @@ module Corona
|
|
54
55
|
r = @snmp.get_bulk 0, BULK_MAX, oid
|
55
56
|
r.varbind_list.each do |vb|
|
56
57
|
oid = vb.name.to_str
|
57
|
-
(last = true; break) if not oid.match
|
58
|
+
(last = true; break) if not oid.match(/^#{Regexp.quote root}/)
|
58
59
|
vbs.push vb
|
59
60
|
end
|
60
61
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: corona
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.8
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Saku Ytti
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-04-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: sequel
|
@@ -53,13 +53,13 @@ dependencies:
|
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '0'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
|
-
name:
|
56
|
+
name: slop
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
59
|
- - '>='
|
60
60
|
- !ruby/object:Gem::Version
|
61
61
|
version: '0'
|
62
|
-
type: :
|
62
|
+
type: :runtime
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
@@ -83,6 +83,7 @@ files:
|
|
83
83
|
- bin/corona
|
84
84
|
- corona.gemspec
|
85
85
|
- lib/corona.rb
|
86
|
+
- lib/corona/cli.rb
|
86
87
|
- lib/corona/config/bootstrap.rb
|
87
88
|
- lib/corona/config/core.rb
|
88
89
|
- lib/corona/core.rb
|