arpdb 0.1.8 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +3 -5
- data/lib/arpdb/arp.rb +12 -11
- data/lib/arpdb/snmp_transport.rb +2 -5
- data/lib/arpdb/version.rb +1 -1
- metadata +1 -1
data/README.md
CHANGED
@@ -27,12 +27,10 @@ Or install it yourself as:
|
|
27
27
|
require 'arpdb'
|
28
28
|
include Arpdb
|
29
29
|
|
30
|
-
|
30
|
+
hosts = %w(10.40.5.1 10.43.5.1)
|
31
31
|
community = 'public'
|
32
32
|
|
33
|
-
adb = Arp.new(
|
34
|
-
|
35
|
-
adb.scan
|
33
|
+
adb = Arp.new(hosts.collect { |host| SNMPTransport.new(host, community) }).scan
|
36
34
|
|
37
35
|
puts adb.mac_to_ip "7a70dec81b02"
|
38
36
|
puts adb.ip_to_mac "172.27.50.2"
|
@@ -40,7 +38,7 @@ puts adb.ip_to_mac "172.27.50.2"
|
|
40
38
|
puts adb.locate_mac "7a70dec81b02"
|
41
39
|
puts adb.locate_ip "172.27.50.2"
|
42
40
|
|
43
|
-
adb.
|
41
|
+
adb.rescan
|
44
42
|
|
45
43
|
```
|
46
44
|
|
data/lib/arpdb/arp.rb
CHANGED
@@ -7,11 +7,14 @@ module Arpdb
|
|
7
7
|
class ArpdbError < StandardError
|
8
8
|
end
|
9
9
|
|
10
|
-
attr_accessor :db
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
10
|
+
attr_accessor :db, :snmp_transports
|
11
|
+
|
12
|
+
# Oh gimme my syringe, I want to do some dependency injection!
|
13
|
+
# On a more serious note: snmp_transports is expected to be either
|
14
|
+
# Arpdb::SNMPTransport or array of those. This way we can easily pass
|
15
|
+
# mocked SNMPTransport here for off-the-hook testing.
|
16
|
+
def initialize(snmp_transports)
|
17
|
+
snmp_transports.is_a?(Array) ? @snmp_transports = snmp_transports : @snmp_transports = [snmp_transports]
|
15
18
|
@db = Array.new
|
16
19
|
end
|
17
20
|
|
@@ -20,18 +23,16 @@ module Arpdb
|
|
20
23
|
end
|
21
24
|
|
22
25
|
def scan
|
23
|
-
|
24
|
-
|
25
|
-
st = SNMPTransport.new(host, @community)
|
26
|
+
handle_exceptions do
|
27
|
+
snmp_transports.each do |st|
|
26
28
|
location = st.get('1.3.6.1.2.1.1.6.0')
|
27
29
|
|
28
30
|
st.walk(%w(1.3.6.1.2.1.4.22.1.2 1.3.6.1.2.1.4.22.1.3)).each do |row|
|
29
|
-
@db << {mac: row.first, ip: row.last, host: host, location: location}
|
31
|
+
@db << {mac: row.first, ip: row.last, host: st.host, location: location}
|
30
32
|
end
|
31
|
-
st.close
|
32
33
|
end
|
33
|
-
|
34
34
|
end
|
35
|
+
|
35
36
|
self
|
36
37
|
end
|
37
38
|
|
data/lib/arpdb/snmp_transport.rb
CHANGED
@@ -2,9 +2,10 @@ require 'snmp'
|
|
2
2
|
|
3
3
|
class SNMPTransport
|
4
4
|
|
5
|
-
attr_accessor :manager
|
5
|
+
attr_accessor :manager, :host
|
6
6
|
|
7
7
|
def initialize(host, community = 'public')
|
8
|
+
@host = host
|
8
9
|
@manager = SNMP::Manager.new(host: host, community: community, mib_modules: [], retries: 1)
|
9
10
|
end
|
10
11
|
|
@@ -24,10 +25,6 @@ class SNMPTransport
|
|
24
25
|
manager.get(oid).each_varbind { |vb| return decode_value(vb) }
|
25
26
|
end
|
26
27
|
|
27
|
-
def close
|
28
|
-
manager.close
|
29
|
-
end
|
30
|
-
|
31
28
|
private
|
32
29
|
|
33
30
|
def decode_value(vb)
|
data/lib/arpdb/version.rb
CHANGED