This library implements SNMP (the Simple Network Management Protocol). It is implemented in pure Ruby, so there are no dependencies on external libraries like net-snmp. You can run this library anywhere that Ruby can run.
This release supports the following:
- The GetRequest, GetNextRequest, GetBulkRequest, SetRequest, Response SNMPv1_Trap, SNMPv2_Trap, and Inform PDUs
- All of the ASN.1 data types defined by SNMPv1 and SNMPv2c
- Sending informs and v1 and v2 traps
- Trap handling for informs and v1 and v2 traps
- Symbolic OID values (ie. "ifTable" instead of "1.3.6.1.2.1.2.2") as parameters to the SNMP::Manager API
- Includes symbol data files for all current IETF MIBs
- Compatible with Ruby 1.9 and higher
See the SNMP::Manager, SNMP::TrapListener, and SNMP::MIB classes and the examples below for more details.
You can use RubyGems to install the latest version of the SNMP library.
gem install snmp
Retrieve a system description.
require 'snmp'
SNMP::Manager.open(:host => 'localhost') do |manager|
response = manager.get(["sysDescr.0", "sysName.0"])
response.each_varbind do |vb|
puts "#{vb.name.to_s} #{vb.value.to_s} #{vb.value.asn1_type}"
end
end
Create a varbind for setting the system name.
require 'snmp'
include SNMP
manager = Manager.new(:host => 'localhost')
varbind = VarBind.new("1.3.6.1.2.1.1.5.0", OctetString.new("My System Name"))
manager.set(varbind)
manager.close
Walk the ifTable.
require 'snmp'
ifTable_columns = ["ifIndex", "ifDescr", "ifInOctets", "ifOutOctets"]
SNMP::Manager.open(:host => 'localhost') do |manager|
manager.walk(ifTable_columns) do |row|
row.each { |vb| print "\t#{vb.value}" }
puts
end
end
A more difficult way to walk the ifTable.
require 'snmp'
include SNMP
Manager.open(:host => 'localhost') do |manager|
ifTable = ObjectId.new("1.3.6.1.2.1.2.2")
next_oid = ifTable
while next_oid.subtree_of?(ifTable)
response = manager.get_next(next_oid)
varbind = response.varbind_list.first
next_oid = varbind.name
puts varbind.to_s
end
end
Get interface description and admin status for 10 rows of the ifTable.
require 'snmp'
include SNMP
ifDescr_OID = ObjectId.new("1.3.6.1.2.1.2.2.1.2")
ifAdminStatus_OID = ObjectId.new("1.3.6.1.2.1.2.2.1.7")
MAX_ROWS = 10
Manager.open(:host => 'localhost') do |manager|
response = manager.get_bulk(0, MAX_ROWS, [ifDescr_OID, ifAdminStatus_OID])
list = response.varbind_list
until list.empty?
ifDescr = list.shift
ifAdminStatus = list.shift
puts "#{ifDescr.value} #{ifAdminStatus.value}"
end
end
Log traps to STDOUT.
require 'snmp'
require 'logger'
log = Logger.new(STDOUT)
m = SNMP::TrapListener.new do |manager|
manager.on_trap_default do |trap|
log.info trap.inspect
end
end
m.join
This SNMP Library is released under the terms of the MIT License.